1

我编写了一个 C# 程序来调用一个函数,通过backgndWorkerEnroll_DoWork该函数又通过一个线程调用另一个函数。在我第一次启动线程后,该功能正常工作。然后我使用该方法中止线程thread.Abort()并再次调用thread.Start()方法。之前的函数调用仍然有效,它不会中止。如何强制关闭线程?

public int capture()
{
    System.Threading.Thread thEnroll = new System.Threading.Thread(delegate()
    {
        // winbio.OpenSession1();
        refresult1 = winbio.Enroll1(finger, false, refresult);
        //winbio.Enroll1(finger, false, refresult, out refresult1);
    });

    thEnroll.Name = "thEnroll";
    thEnroll.Start();
    while (true)
    {
        if (!thEnroll.IsAlive)
            break;
    }
    thEnroll.Abort();
    return result;
}

private void backgndWorkerEnroll_DoWork(object sender, DoWorkEventArgs e)
{
    capture();
}

还有一个查询。如何通过按钮单击事件强制关闭 backgroundDo_Work。

4

2 回答 2

3

由于您有无限循环,因此似乎无法执行您的中止操作:

while (true)
{
    // This will run forever
    if (!thEnroll.IsAlive)
        break;
}

这个循环阻止线程完成。
您的植入也似乎很奇怪,如果线程不存在,您不需要中止它..

于 2013-03-18T12:15:15.907 回答
0

我不太熟悉multithreading,如果我错了,请纠正我......但据我了解,一旦 aThread被中止,它就无法再次启动。这可以解释您正在经历的行为(它第一次工作正常,但在第一次thread停止之后就不行了)

thread.abort我用谷歌搜索了和之间的区别thread.join见这个

如果您改为调用Thread.Join,线程将exit很好地代替抛出ThreadAbortedException站点还说的是,在您调用之后,您abort还应该调用join或处理ThreadAbortedException来执行此操作。

于 2013-03-18T12:35:24.633 回答