2017-08-31 21 views
1

私はメソッドの順序を変更するときに動作します。スレッドが実行されていません

private void RefreshInfo() 
    { 
     try 
     { 
      Task.Factory.StartNew(() => 
      { 
       DXSplashScreen.Show<SplashScreenView1>(); 
       LoadGrid(); 
       Thread.Sleep(5000); 
      }).ContinueWith(t => DXSplashScreen.Close(),TaskScheduler.FromCurrentSynchronizationContext()); 
     } 
     catch(Exception ex) { 
      MessageBox.Show(ex.Message); 
     } 

    } 

私はそれを実行したときにスプラッシュ画面が速い近く、5ます。seconsを待っていない例:

このコードを使用してイムについては 。

しかし、私は、これは実行する場合:

try 
     { 
      Task.Factory.StartNew(() => 
      { 
       DXSplashScreen.Show<SplashScreenView1>(); 
       Thread.Sleep(5000); 
       LoadGrid(); 
      }).ContinueWith(t => DXSplashScreen.Close(),TaskScheduler.FromCurrentSynchronizationContext()); 
     } 
     catch(Exception ex) { 
      MessageBox.Show(ex.Message); 
     } 

スプラッシュ画面が5秒間待機します。 なぜですか? よろしくお願いいたします。

答えて

1

誰かが問題を再現できるだけの情報を提供していませんが、コードがちょっと変わっています。

まず、UIスレッドにスプラッシュ画面を表示して閉じる必要があります。

第2に、try/catchは、タスクで発生する例外をキャッチしません。

これを試してください:あなたは試しにanyerrorを得ていないと述べたとおり、loadGridプロパティbecasuseコードに誤りがあった

DXSplashScreen.Show<SplashScreenView1>(); 
     Task.Factory.StartNew(() => 
     { 
      LoadData();    
     }).ContinueWith(t => { 
      grdLicenses.ItemsSource = DataToTable(); 
      DXSplashScreen.Close(); 
      if (t.Exception !=null) 
      { 
       MessageBox.Show(t.Exception.Message); 
      }},TaskScheduler.FromCurrentSynchronizationContext()); 

これは私の作品の助け ため

private void RefreshInfo() 
{ 
    DXSplashScreen.Show<SplashScreenView1>(); 
    Task.Factory.StartNew(() => 
    { 
     LoadGrid(); 
     Thread.Sleep(5000); 
    }).ContinueWith(t => 
    { 
     DXSplashScreen.Close(); 
     if (t.Exception != null) 
      MessageBox.Show(t.Exception.Message); 
    }, TaskScheduler.FromCurrentSynchronizationContext()); 
} 
+0

hello mm8、私はこのコードを使って試してみましょう。 –

0

感謝メインスレッドのコントロールを変更します。 データベースから値を取得したloadDataを移動し、メインスレッドを更新する唯一のメソッドを続行して追加しました。 よろしくお願いします。

関連する問題