防止在连接另一螺纹时形成螺纹堵塞

本文关键字:连接 | 更新日期: 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);