我有一个必须每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");
为什么我的表单已被锁定以及如何解决?
答案 0 :(得分:3)
while (true)
将永远运行,因此在while
循环被分解之前,您的表单无法接收任何消息,在您的情况下,直到线程完成为止。
我建议您使用Thread
或BackgroundWorker
,而不是使用Task
,因为这些类更易于使用。例如,您可以使用BackgroundWorker
的{{1}}事件向用户显示消息(不要忘记RunWorkerCompleted
)。