C# .Net BackgroundWorker没有响应

C# .Net BackgroundWorker没有响应,c#,winforms,thread-safety,C#,Winforms,Thread Safety,我正在我的C#应用程序中创建一个BackgroundWorker。在DoWork内部,很少调用web服务。一切正常,但只要DoWork过程完成,应用程序就没有响应。而且,我不会从BackgroundWorker更新任何UI组件 下面是在DoWork private void bwNQUpdate_DoWork(object sender, DoWorkEventArgs e) { int nStatusCode = 0; QDetails[] pQDetails = n

我正在我的C#应用程序中创建一个
BackgroundWorker
。在DoWork内部,很少调用web服务。一切正常,但只要
DoWork
过程完成,应用程序就没有响应。而且,我不会从
BackgroundWorker
更新任何UI组件

下面是在
DoWork

 private void bwNQUpdate_DoWork(object sender, DoWorkEventArgs e)
 {
     int nStatusCode = 0;

     QDetails[] pQDetails = null;
     string queueName = "test_queue";

     int nQLength = cMezeoFileCloud.NQGetLength(ServiceUrl, queueName, ref nStatusCode);
     if (nQLength > 0)
         pQDetails = cFileCloud.GetData(ServiceUrl, queueName, nQLength, ref nStatusCode);

     if (pQDetails != null)
     {        
         for (int n = 0; n < pQDetails[0].nTotalQ; n++)
         {             
             UpdateFromNQ(pNQDetails[n]);
             cFileCloud.QValue(ServiceUrl , queueName, 1, ref nStatusCode);
         } 
     }     
 }

执行
RunWorkerCompleted
后,应用程序没有响应。

首先,检查MessageBox.Show(“下载完成”)通过使用断点调用


如果它确实被调用,请尝试调用消息框调用,而不是直接调用它。基本上,从后台工作程序中触发的任何事件都可能来自它的底层线程。

首先,检查MessageBox.Show(“下载完成”)通过使用断点调用


如果它确实被调用,请尝试调用消息框调用,而不是直接调用它。基本上,从后台工作程序中触发的任何事件都可能来自它的底层线程。

您编写的RunWorkerCompleted完全可以。 RunWorkerCompleted事件由调用线程而不是工作线程处理。 即使您从后台线程执行MessageBox.Show,也不会出现问题,因为线程将生成自己的Uicomponent


我怀疑的问题在你的工作范围内。

你写的作业完成得很好。 RunWorkerCompleted事件由调用线程而不是工作线程处理。 即使您从后台线程执行MessageBox.Show,也不会出现问题,因为线程将生成自己的Uicomponent


我怀疑的问题在你的工作范围内。

发布你的代码!如果没有它,你很难感觉到会出什么问题!WPF或表单应用程序?发生这种情况时,主线程上正在执行什么代码?@ebattulga:这是一个表单应用程序。@VinodMaurya:只要检查一下,如果您在
DoWork
处理程序中注释了所有代码,它是否仍然挂起?发布您的代码!如果没有它,你很难感觉到会出什么问题!WPF或表单应用程序?发生这种情况时,主线程上正在执行什么代码?@ebattulga:这是一个表单应用程序。@VinodMaurya:只要检查一下,如果在
DoWork
处理程序中注释所有代码,它是否仍然挂起?
private void bwNQUpdate_RunWorkerCompleted(object sender, ProgressChangedEventArgs e)
{
      MessageBox.Show("Download completed.");
}