当我改变方法的顺序时。 例如
我正在使用此代码:
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秒钟。 为什么? 此致
答案 0 :(得分: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());
}
答案 1 :(得分:0)
感谢您的帮助 这对我有用
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,然后在continue中添加了更新主线程的唯一方法。 此致