当我尝试连接到一个不存在的实例时,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
}
请您参考如下方法:
Dispatcher.BeginInvoke 将调用放回 UI 线程而不是后台线程。因此,您的所有操作都在 UI 线程上运行。因此锁定了您的 UI。
使用Task 或BackgroundWorker 委托(delegate)对后台线程的调用。请注意,无法从后台线程修改任何 GUI 组件,因此您需要使用 Dispatcher.Invoke 或 Dispatcher.BeginInvoke 将其编码回 UI 线程。
Task.Factory.StartNew(() => { Timedtask(instance, database) });
或
如果使用 .Net 3.5,则可以使用 backgroundWorker:
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, e) => { Timedtask(instance, database); };
worker.RunWorkerAsync();
