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