C# Winforms UI无响应查询
我有一个用户界面,里面有一个C# Winforms UI无响应查询,c#,winforms,.net-3.5,C#,Winforms,.net 3.5,我有一个用户界面,里面有一个BackgroundWorker 当BackgroundWorker运行时,它通过编组的方式更新UI。在其中一次运行期间,UI没有响应。我在VisualStudio中点击暂停按钮查看发生了什么 以下行显示为在“线程”窗口中运行: Application.Run(new uxRunSetup()) private delegate void DisplayCounterHandler(int[]计数,int总数) 我一直在通读。我的问题是,假设调用了DisplayCo
BackgroundWorker
当BackgroundWorker
运行时,它通过编组的方式更新UI。在其中一次运行期间,UI没有响应。我在VisualStudio中点击暂停按钮查看发生了什么
以下行显示为在“线程”窗口中运行:
Application.Run(new uxRunSetup())代码>
private delegate void DisplayCounterHandler(int[]计数,int总数)代码>
DisplayCounterHandler
。但是,BackgroundWorker已经完成了。这是否会导致UI无响应和崩溃
谢谢。您应该将调用切换到BeginInvoke,即
if(this.InvokeRequired)
{
this.BeginInvoke(...);
return;
}
// UI updates here
在调用行中,后台工作程序被迫等待UI操作部分完成,因此如果出现其他操作并试图结束后台工作程序,UI可能会挂起,因为:
--丹谢谢你,丹。执行
BeginInvoke
是有意义的。我会尝试一下,并随时通知您。@debracey如果您的后台工作线程运行得太快,以至于频繁调用BeginInvoke()操作,会发生什么情况?这也会导致反应迟钝吗?是的。你需要在上面加一些限制器。
if(this.InvokeRequired)
{
this.BeginInvoke(...);
return;
}
// UI updates here