0

有什么办法可以创建一个线程,不管 1 分钟后如何结束?

目前我创建一个线程来登录网站代码如下:

 private void runBrowserThread()
    {

        specialCheck = 0;
        var th = new Thread(() =>
        {
            var br = new WebBrowser();
            browserCounter = 0;
            br.ScriptErrorsSuppressed = true;
            br.DocumentCompleted += browser_DocumentCompleted;
            br.Navigate("https://www.xample.com/login");
            Application.Run();

        });

        th.SetApartmentState(ApartmentState.STA);
        th.Start();
        th.Join();
    }

但是这个过程有很多复杂的地方,所以我不想把它们都编码,我在想像自毁这样的东西,我可以在制作这个计时器时使用,所以不管代码卡住了,它确实没有到达其中一个,Application.Exitthread()它将永远卡在那里,因此在 1 分钟后自毁,退出线程以便代码可以继续。

因为目前我Application.Exitthread()在很多地方都有,但有时代码被卡住并没有到达任何地方,所以让我知道是否有任何方法。

4

1 回答 1

0

由于您已经阻塞,th.Join您可以使用它来终止线程,如下所示:

Boolean success = th.Join( 60 * 1000 ); // 60 second timeout
if( !success ) th.Abort();

如果您不想阻止加入,那么您可以生成第二个看门狗线程,该线程仅用于阻止Join并执行超时和终止任务,而不是发起者线程。

此外,使用Application.ExitThread也不是好的设计。线程可以通过return从它们的入口点方法终止——它还消除了对Application类及其相关System.Windows.Forms程序集的不必要依赖。

于 2012-09-10T16:29:23.157 回答