C# 在backgroundworker中处理dialogwindow
我正在backgroundworker中加载屏幕:C# 在backgroundworker中处理dialogwindow,c#,winforms,backgroundworker,C#,Winforms,Backgroundworker,我正在backgroundworker中加载屏幕: private void LSLoadingScreen(object sender, DoWorkEventArgs e) { LoadingScreen ls = new LoadingScreen(this.timerStart); ls.ShowDialog(); while (LoadingScreen.CancellationPending) {
private void LSLoadingScreen(object sender, DoWorkEventArgs e)
{
LoadingScreen ls = new LoadingScreen(this.timerStart);
ls.ShowDialog();
while (LoadingScreen.CancellationPending)
{
ls.Dispose();
LoadingScreen.Dispose();
}
但当我在其他功能中使用此代码时,我的加载屏幕不会处理:
LoadingScreen.CancelAsync();
timerStart = false;
LoadingScreen.Dispose();
如何正确地处理它?首先,ShowDialog()将阻止其余代码在对话框关闭之前执行,而您永远不会这样做
即使它确实关闭了,它也会计算while循环(很可能是false,因此跳过),然后您的backgroundworker就完成了
如果您所做的只是显示一个对话框,那么我将在主线程上执行此操作,并在后台工作程序上执行加载过程
public partial class MainForm:Form
{
LoadingScreen ls;
public MainForm()
{
}
public void StartLoad()
{
ls = new LoadingScreen(this.timerStart);
backgroundWorker.RunWorkerAsync();
ls.Show();
}
void backgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
//Loading code goes here
}
void BackgroundWorkerMainRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(ls != null)
ls.Close();
}
}
如何使加载屏幕ls在BackgroundWorker函数中可见?申报单放在哪里?LoadingScreen ls=新的LoadingScreen(this.timerStart);当我把它放在“public partial class MainForm:Form{”后面时,我得到一个错误,即“关键字‘this’在当前上下文中不可用”,当我把它放在public MainForm()后面时,{,加载屏幕在函数中不可用。很抱歉这个愚蠢的问题。不要让它在Bgw中可见,在启动Bgw之前显示它。