关闭运行BackGround Thread的表单时出错

时间:2016-06-26 08:15:02

标签: c# multithreading forms

第一次,我编写了一个运行前景(defult)线程的应用程序:

t = new Thread(new ThreadStart(GenerateRandom));
t.Start();

当我在运行线程时关闭我的表单时,它会崩溃并抛出异常。 在一些搜索(How to close all running threads?)之后,我发现前景线程在关闭main之后一直运行,我必须将我的线程设置为背景,所以我做的事情是这样的:

t = new Thread(new ThreadStart(GenerateRandom));
t.IsBackground = true;
t.Start();

但它仍然会抛出异常并且我在运行我的线程时无法关闭mhy形式 !!!

我不知道为什么?!

我在 FormClosing事件中尝试了一些解决方案

  1. 使用:Enviroment.Exit(Enviroment.ExitCode);
  2. 使用:thread.Abort();
  3. 第一个没有工作,当我关闭表格时,第二个就崩溃了。

    这是我的程序的一些图片:

    图片1,申请表格Befor Closing Form

    图2,按下关闭按钮后 After Closing Form

    谢谢大家。

2 个答案:

答案 0 :(得分:1)

您是否看到了异常消息FormatException。你会用这个名字搜索你会有想法吗?它与您运行的线程无关。它发生的原因是,输入的文本不是数字,因此尝试将其解析为Int失败,但该异常。

答案 1 :(得分:1)

通常您运行后台作业 UNTIL 表单已关闭。

类似的东西:

void myThreadJob()
{
   while (!IsDisposed)
   {
      // do my "infinite" task until the form is disposed
   }
}

另一种方法是在表单中包含一个布尔字段。表单关闭后,请在true事件中将字段设置为FormClosing。然后检查线程代码中while循环中的布尔字段状态。