一段时间以来,我一直在寻找我的特定问题的答案,但没有成功。
我的程序中有一个任务需要几秒钟,我想在该任务完成时显示一个新表单。新表单有一个加载栏和一些文本。
我需要在任务的同时显示新表单,否则在我关闭新表单之前任务不会开始。
这是我现在的解决方案:
private void loadingBar()
{
frmLoading frm = new frmLoading("Please wait while the database is being backed up", "This might take several days.");
frm.ShowDialog();
}
public void Backup()
{
Thread load = new Thread(new ThreadStart(loadingBar));
load.Start();
///Execute a task.
load.Abort();
}
所以,这工作正常,但我的问题是:关闭加载线程中的表单“frm”以使其停止不是更好吗?
最佳答案
你可以通过几种方式做到这一点......
1 - 你可以按照 BendEg 的建议去做,并在你准备好后调用你 frmClose
类似的东西;
Invoke(new Action(Close));
或
Invoke(new Action(() => frmMain.Close()));
2 - 或者您可以简单地使用后台 worker ;
演示这一点的最简单方法是向您的表单添加一个 BackgroundWorker,并使用提供的事件;
public Form1()
{
InitializeComponent();
backgroundWorker1.RunWorkerAsync();
MessageBox.Show(@"Please wait while the database is being backed up", @"This might take several days.");
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Debug.WriteLine("Running"); //Execute a task
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Debug.WriteLine("Ended"); //Dispose of any objects you'd like (close yor form etc.)
}
希望对您有所帮助。
关于c# - 关闭在另一个线程中创建的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187955/