我面临一个问题。我点击了一个正在调用几个方法的按钮,虽然主线程已经锁定,所以我创建了我的类的一个实例(即Form1
),例如Form1Object
然后按钮调用方法如下:Form1Object.Check1
等等。主线程锁定在C#
尽管线程仍然锁定(即GUI在一段时间内变得没有响应)有没有办法解决这个问题,任何示例都将不胜感激。
有问题的代码如下:
private void StartChecks_Click(object sender, EventArgs e)
{
Form1 Form1Object = new Form1();
Form1Object.InitChecks();
}
public void InitChecks()
{
Check1();
Check2();
Check3();
Check4();
Check5();
Check6();
Check7();
}
你应该看看使用BackgroundWorker,但在这种情况下,它甚至可能足以使用Application.DoEvents();. http://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx – eandersson
您可以通过在单独的线程上运行代码来解决此问题。这就是你保持主要(UI)线程不被锁定的原因。事实上,你不应该在UI线程上精确运行长时间运行的操作,因为它会导致UI无响应。这里的解决方案似乎很明显... –
另外,**从不使用Application.DoEvents()**。无法强调这一点。学习如何正确地执行多线程(或至少使用'BackgroundWorker')。不要破解它。忽略所有以不同方式告诉你的人。 –