windows窗体应用程序C#中的后台工作程序不阻止用户界面

windows窗体应用程序C#中的后台工作程序不阻止用户界面,c#,winforms,C#,Winforms,我在我的win form应用程序中使用了后台工作程序。我正在显示一个长时间运行的进程的进度条表单,并且该长时间运行的进程位于后台工作程序上 注意:我使用后台工作程序以字幕样式显示进度条 我面临的问题是由于后台工作人员,我的用户界面有响应,但我不希望它有响应 我的代码如下: ProgressBarForm progForm = new ProgressBarForm(); progForm.Show(); BackgroundWorker worker = new BackgroundWorker

我在我的win form应用程序中使用了后台工作程序。我正在显示一个长时间运行的进程的进度条表单,并且该长时间运行的进程位于后台工作程序上

注意:我使用后台工作程序以字幕样式显示进度条

我面临的问题是由于后台工作人员,我的用户界面有响应,但我不希望它有响应

我的代码如下:

ProgressBarForm progForm = new ProgressBarForm();
progForm.Show();
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork+= myMethod;
worker.RunWorkerAsync();

考虑到您正在使用表单显示进度,您可以使用
ShowDialog
而不是
Show
。这将以模式对话框的形式打开窗口,阻止对基础窗口的UI操作,直到进度窗口关闭

需要考虑的一些事项:

  • ShowDialog
    是一个阻塞调用,因此在启动后台工作程序后调用它
  • 确保用户无法关闭窗口,并在后台工作程序完成后以编程方式自行关闭窗口

如果您不想使用用户界面,请设置.Enabled=false;在每个表单控件上,然后在_RunWorkerCompleted中反转更改


只需记住保留所有已启用的取消/关闭按钮:)

然后在UI线程而不是后台工作线程上执行该操作?但你为什么希望你的用户界面没有响应呢?你的进度条不会被填满。如果你希望你的UI没有响应,为什么要使用后台工作程序?这没有任何意义。我刚才读了什么…谢谢巴斯·布雷克尔曼。我尝试了你的建议,得到了我想要的结果。