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 でブロックしたくない場合は、ブロックするためだけに存在する 2 番目のウォッチドッグ スレッドを生成し、起動Joinスレッドの代わりにタイムアウトおよび終了タスクを実行できます。

また、 の使用はApplication.ExitThread良いデザインではありません。スレッドはreturn、そのエントリポイント メソッドから ing によって終了できます。これにより、Applicationクラスとそれに関連付けられSystem.Windows.Formsたアセンブリへの不要な依存も削除されます。

于 2012-09-10T16:29:23.157 に答える