c# - 关闭在另一个线程中创建的表单

标签 c# multithreading winforms

一段时间以来,我一直在寻找我的特定问题的答案,但没有成功。

我的程序中有一个任务需要几秒钟,我想在该任务完成时显示一个新表单。新表单有一个加载栏和一些文本。

我需要在任务的同时显示新表单,否则在我关闭新表单之前任务不会开始。

这是我现在的解决方案:

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/

相关文章:

android - 不同的 Intent 服务是否在同一线程上排队?

JAVA 多线程一次检查多个数字的素数比单线程慢

c# - 必须允许委托(delegate)线程完成

c# - 当表单的类变得太大时怎么办?

c# - 如何解决 SqlException 在锁定时死锁 |通信缓冲资源

c# - LINQ-to-SQL:返回单个标量值的存储过程?

c# - 替换一个字符串中的几个子串

c# - 从 Azure Blob 存储读取数据时 OpenReadAsync() 出现奇怪的结果

c# - 如何在 WinForms 中将字典绑定(bind)到组合框?

c# - 为什么 Context.User.Identity.Name 在 Windows Form Hub 上下文中为空?