线程的自毁定时器?

时间:2012-09-10 16:25:26

标签: c# multithreading visual-studio-2010

有什么方法可以创建一个无论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(),但有时我的代码被卡住了并没有达到,所以如果有任何办法,请告诉我。

1 个答案:

答案 0 :(得分:0)

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

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

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

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