防止在连接另一螺纹时形成螺纹堵塞
本文关键字:连接 | 更新日期: 2023-09-27 18:11:34
我有一个方法,写一些文本的形式,并在一个线程上运行。
当我通过一个按钮停止它时,它也会在盒子上写一些文本,但在那个时候,我的主要方法正在等待join方法。
private void stop_btn_Click(object sender, EventArgs e)
{
A.stop_byuser(); //Some code with end with a log writing
foreach(Thread t in threads)
{
if (t.IsAlive)
t.Join();//Stops for finishing of thread
}
}
线程是来我的日志写代码之前完成,它是使用表单元素:
public void write_log(TextBox tb, String value)
{
if (tb.InvokeRequired) {
tb.Invoke(write_log_delegate, tb, value + "'n");//At here code is waiting
}
else
tb.Text += value + "'n";
}
我怎样才能消除这种无用的等待。
编辑:更改为更复杂的解决方案,以避免使用Abort(),如下所述:
在你的线程中,你需要一个循环来检查重置事件:
while (running)
{
/* Put thread code here */
if (stopEvent.WaitOne(500) || !running)
break;
}
然后使用WaitHandle.WaitAll()等待所有线程完成。
running = false;
foreach (var evt in stopEvents)
{
evt.Set();
}
// Wait for all threads to finish
WaitHandle.WaitAll(stopEvents);