我正在后台工作中加载屏幕:
private void LSLoadingScreen(object sender, DoWorkEventArgs e)
{
LoadingScreen ls = new LoadingScreen(this.timerStart);
ls.ShowDialog();
while (LoadingScreen.CancellationPending)
{
ls.Dispose();
LoadingScreen.Dispose();
}
但是当我在其他功能中使用此代码时,我的loadingScreen不会处理:
LoadingScreen.CancelAsync();
timerStart = false;
LoadingScreen.Dispose();
如何妥善处理?
答案 0 :(得分:3)
首先,ShowDialog()将阻止其余代码执行,直到对话框关闭 - 这是你永远不会做的。
即使它关闭了,它也会评估while循环(很可能是假的,所以跳过),然后你的后台工作就会完成。
如果你正在做的只是显示一个对话框,那么我会在主线程上执行此操作,并在后台工作程序上进行加载过程..
尝试在主UI线程中获取所有UI元素。
希望有所帮助
修改强>
根据您的评论...
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();
}
}