Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c windows窗体无法响应单击操作_C#_Backgroundworker - Fatal编程技术网

C# c windows窗体无法响应单击操作

C# c windows窗体无法响应单击操作,c#,backgroundworker,C#,Backgroundworker,我有一个WindowsForm项目,它运行两个BackgroundWorker对象,用于测试是否应该收集数据以及数据的收集。这些看起来运行正常,但当我添加查看收集的数据的功能时,表单在尝试绘制可用数据时冻结 单击第一个按钮时,数据将在带有列表框的新表单窗口中列出。在这个新窗口中,我有另一个按钮,用于在看起来正常的情况下绘制数据 这就是整个项目冻结的地方。我尝试过将传递到新表单中的类引用软拷贝,而不是在构造函数中创建一个新对象。只要数据采集BackgroundWorker没有运行,它就可以正常工作

我有一个WindowsForm项目,它运行两个BackgroundWorker对象,用于测试是否应该收集数据以及数据的收集。这些看起来运行正常,但当我添加查看收集的数据的功能时,表单在尝试绘制可用数据时冻结

单击第一个按钮时,数据将在带有列表框的新表单窗口中列出。在这个新窗口中,我有另一个按钮,用于在看起来正常的情况下绘制数据

这就是整个项目冻结的地方。我尝试过将传递到新表单中的类引用软拷贝,而不是在构造函数中创建一个新对象。只要数据采集BackgroundWorker没有运行,它就可以正常工作。当采集发生时,单击绘图按钮冻结表单,“数据显示”按钮工作正常

private void wellStatusButton1_Click(object sender, EventArgs e)
{
     try
     {
        ListDataForm temp = new ListDataForm(tubes[0], 1);
        temp.ShowDialog();
     }
     catch (Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
  }

private void plotDataButton_Click(object sender, EventArgs e)
{
     try
     {
        GraphForm plotData = new GraphForm(at);
        plotData.ShowDialog();
     }
     catch (Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
}

很难从你的问题中获得很多信息,但有一件事可能对你有用:当windows程序在后台执行其他操作时,UI通常会被冻结。您可以定期尝试使用:Application.DoEvents,这将使UI看起来更具响应性。

很难从您的问题中获得更多信息,但有一点可能对您有用:当windows程序在后台执行其他操作时,UI通常会被冻结。您可以定期尝试使用:Application.DoEvents,这将使UI看起来更具响应性。

您确定它是在后台线程而不是UI线程上运行的吗。尝试调试它…我们至少需要看到问题代码的实现。您的示例代码告诉我们的只是您正在创建两个对象这一事实,创建线程时设置thread.Name属性,并在应用程序的主线程上启动,以确保调试时线程正在执行什么操作。此处提供的有限信息提供了一些帮助跟踪问题的提示:提示1:在调试模式下启动应用程序,并在检测到应用程序挂起时按Ctrl+Alt+PauseBreak和调试器将停止。您应该会看到一个无限循环或同步锁问题。使用调试器查找问题就像狗找到骨头一样。。。提示2:使用线程窗口,调试菜单>窗口>线程提示3:确认ShowDialog模式窗口没有隐藏在主窗体后面?使它看起来冻结?您确定它是在后台线程而不是UI线程上运行的吗。尝试调试它…我们至少需要看到问题代码的实现。您的示例代码告诉我们的只是您正在创建两个对象这一事实,创建线程时设置thread.Name属性,并在应用程序的主线程上启动,以确保调试时线程正在执行什么操作。此处提供的有限信息提供了一些帮助跟踪问题的提示:提示1:在调试模式下启动应用程序,并在检测到应用程序挂起时按Ctrl+Alt+PauseBreak和调试器将停止。您应该会看到一个无限循环或同步锁问题。使用调试器查找问题就像狗找到骨头一样。。。提示2:使用线程窗口,调试菜单>窗口>线程提示3:确认ShowDialog模式窗口没有隐藏在主窗体后面?让它看起来像冰冻的?