启动线程时,我的表单被锁定

时间:2015-06-29 06:50:00

标签: c# multithreading

我有一个必须每20分钟保存到数据库的大数据集。

我想要做的是创建一个线程来在后台完成这项工作,而是通过表单锁定。

var firstDate = DateTime.Now;
var finish = dateTimePicker1;
var next = firstDate.AddMilliseconds(10000);

while (true)
{        
      var now = DateTime.Now;
      var th = new Thread(new ThreadStart(Start));

      cnt++;

      next = DateTime.Now.AddMilliseconds(10000);
      th.IsBackground = true;
      th.Start();
      hread.Sleep(20000);
      if (now==finish.Value)
      {
           break;
      }
}
MessageBox.Show("fi");

为什么我的表单已被锁定以及如何解决?

1 个答案:

答案 0 :(得分:3)

while (true)将永远运行,因此在while循环被分解之前,您的表单无法接收任何消息,在您的情况下,直到线程完成为止。

我建议您使用ThreadBackgroundWorker,而不是使用Task,因为这些类更易于使用。例如,您可以使用BackgroundWorker的{​​{1}}事件向用户显示消息(不要忘记RunWorkerCompleted)。