当我尝试连接到一个不存在的实例时,UI在我的应用程序中锁定我尝试使用新线程,但这似乎不起作用
//从主类打电话
Dispatcher.BeginInvoke(new Action(
() => Timedtask(instance, database)));
//Method
public void Timedtask(string instance, string database)
{
Timer.Start();
Timer.Tick += delegate
{
if (!TimedTask.timer_Tick(instance, database))
{
Dispatcher.CurrentDispatcher.Invoke(Stopped);
}
};
}
// Try an open connection
using (var con1 = new SqlConnection
{
ConnectionString = @"Data Source=" + instanceName1 + ";Integrated Security=SSPI;" +
"MultipleActiveResultSets=true;"
})
{
//more code
con1.Open();
//more code
}
Run Code Online (Sandbox Code Playgroud)
Dispatcher.BeginInvoke将回调放回UI线程而不是后台线程.因此,您的所有操作都在UI线程上运行.因此锁定你的用户界面.
使用Task或BackgroundWorker委托后台线程调用.请注意,任何GUI组件都无法从后台线程进行修改,因此您需要使用Dispatcher.Invoke或者在UI线程上对其进行编组Dispatcher.BeginInvoke.
Task.Factory.StartNew(() => { Timedtask(instance, database) });
Run Code Online (Sandbox Code Playgroud)
要么
如果使用.Net 3.5,则可以使用backgroundWorker:
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, e) => { Timedtask(instance, database); };
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |