gpt4 book ai didi

c# - 数据库连接期间的 UI 锁定

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:15 26 4
gpt4 key购买 nike

当我尝试连接到一个不存在的实例时,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。

使用TaskBackgroundWorker 委托(delegate)对后台线程的调用。请注意,无法从后台线程修改任何 GUI 组件,因此您需要使用 Dispatcher.InvokeDispatcher.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();

关于c# - 数据库连接期间的 UI 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22073975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com