【发布时间】:2016-10-05 03:43:17
【问题描述】:
我似乎无法在 C# 中终止我的线程。该程序似乎陷入了 FormClosing 事件的无限循环中。
EDIT // 当 FormClosing 事件被触发时,我试图结束线程并关闭整个程序。
代码如下:
public partial class Form1 : Form
{
private Thread thread;
private volatile bool threadRunning = true;
public Form1()
{
InitializeComponent();
}
private void Loop()
{
Console.WriteLine(threadRunning);
while (threadRunning)
{
MethodInvoker mi = delegate { timeLabel.Text = TimeWriterSingleton.Instance.OutputTime(); };
Invoke(mi);
}
}
private void Form1_Load(object sender, EventArgs e)
{
thread = new Thread(Loop);
thread.Start();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
threadRunning = false;
thread.Join();
}
}
【问题讨论】:
-
别这样。如果您希望将来某个时间更新某些 UI 元素,请制作一个计时器,当计时器滴答作响时,更新该元素。
-
Winforms 和 WPF 不是线程安全的!所以除了运行消息循环的线程之外,切勿从任何线程调用它们。
-
参见例如stackoverflow.com/questions/17575673/…、stackoverflow.com/questions/12502229/… 和 stackoverflow.com/questions/24211934/…(最后一个是关于 WPF,但基本问题和概念是相同的)。
标签: c# multithreading