2017-08-31 72 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秒。 为什么? Regards

回答

1

你还没有提供足够的信息给任何人能够重现你的问题,但你的代码看起来有点奇怪。

首先,您应该在UI线程上显示并关闭启动画面。

其次,您的try/catch不会捕获任务中发生的任何异常。

试试这个:

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

感谢您的帮助 至于你说的尝试没有得到anyerror这对我的作品

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()); 

,出现在代码中的错误具有因该loadGrid财产修改主线程中的控件。 我移动了loadData,它从数据库中获取值,然后继续添加更新主线程的唯一方法。 Regards