Adi*_*dov 1 c# wpf multithreading
我有C#WPF应用程序从数据库读取数据,然后做一些工作.但问题是当我正在读取数据时,我的UI没有响应.我已经尝试了任务和调度程序.他们都没有帮助.下面的代码位于button_click事件中.这是代码:
DataSet ds;
DataTable dt = new DataTable();
Task myTask = new Task(new Action(() =>
{
//GetMyDataSet() returns DataSet
ds = GetMyDataSet();
dt = ds.Tables["MyTableName"];
}));
myTask.Start();
while (!myTask.IsCompleted)
{
System.Threading.Thread.Sleep(1000);
}
//Continue
Run Code Online (Sandbox Code Playgroud)
首先,摆脱睡眠旋转,它完全违背了使用a的目的,Task因为它不允许UI线程继续进行直到Task完成.你不希望这样!
Task myTask = Task.Factory.StartNew(
new Action(() =>
{
DataSet ds;
DataTable dt = new DataTable();
//GetMyDataSet() returns DataSet
ds = GetMyDataSet();
dt = ds.Tables["MyTableName"];
// use Invoke/BeginInvoke to update UI
}));
Run Code Online (Sandbox Code Playgroud)
现在,您的任务将与UI线程并行运行,直到完成.在Task代码结束时使用Dispatcher.BeginInvoke更新UI.现在应该没问题.
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |