2

私はスレッド化が初めてで、これを達成するためにタスクを使用する方法を見つけようとしています:

private void botCore()
{
    if (CheckBox2.Checked == true)
    {
        Task Core =  Task.Factory.StartNew(() =>
        {
            MessageBox.Show("Proxy -> Next");
            Webbrowser1.Navigate("www.lalaland.com")

        });
        Core.ExecuteFor(2000)); // Executes the task above for only 2000 milliseconds then proceeds

        if  (Core.IsCompleted)              // Checks if the 2000 milliseconds are up then executes another statement.
        {
            MessageBox.Show("Proxy -> Next after next");
            Webbrowser1.Navigate("www.balalala.com")
            ExecuteFor(3000) //Execute this for 3000 milliseconds.
        }
        Core.Stop();
    }
}

基本的に、タスクを x 時間実行しようとしています。タスクが完了すると、別のタスクを x 時間実行し、ループで実行します。これが UI スレッドなどのより良い方法で実現できる場合は、ソースを提供してください。私はC#にかなり慣れていません。私を支えてくれた人に感謝します。

4

3 に答える 3

0

簡単な解決策は、呼び出しCore.Wait(_time_to_wait_)て戻り値を確認することです。true の場合、タスクは完了しています。それ以外の場合は偽。タスクがタイムアウトし、それを「強制終了」したい場合は、これを参照してください: http://msdn.microsoft.com/en-us/library/dd537607.aspx

Task.Waitの直後にを呼び出すとTask.Factory.StartNew、タスクが実行される前にタイマーがタイムアウトする可能性があることに注意してください。これは、タスクが最初にタスク スケジューラのキューに配置され、タスクの初期化と実行の間に顕著な遅延が生じる可能性があるためです。これを回避するには (遅延が発生する主なシナリオである重い負荷の下で正確な時間制御が必要な場合)、タスクに追加のシグナルを追加し、最初にそれを待ちます。

var started = new ManualResetEventSlim(false);
var t = Task.Factory.StartNew(() =>
    {
        started.Set();
        //...
    });
started.Wait();
t.Wait(2000);
于 2013-06-12T07:10:39.153 に答える
0

あなたが私に尋ねたら、私はメソッドを使い始めると言うでしょう. それは始めに。それに加えて、この例を見てください。すべてを説明しているわけではありませんが、大丈夫です。 http://msdn.microsoft.com/en-us/library/dd537610.aspx

注: タスクを待機できます。しかし、それが完了すると終了します。2000 ミリ秒後に自動的に閉じることはありません。これは手動で行う必要があります

それに加えて、この例を試してみてください..テストしていません。

private void botCore()
{
    if (CheckBox2.Checked == true)
    {
       Task coreTask = Task.Factory.StartNew(() => printMessage("1", "www.google.nl"));
       await Task.Delay(2000);
       coreTask.Stop() // AS you asked that it will stop.

        if  (coreTask.IsCompleted) // Checks if the 2000 milliseconds are up then executes another statement.
        {
           Task coreTask2 = Task.Factory.StartNew(() => printMessage("2", "www.google.nl?p=2"));
           await Task.Delay(3000);
           coreTask2.Stop() // AS you asked that it will stop.
        }
        Core.Stop();
    }
}


public void printMessage(string text, string url){
    MessageBox.Show("Proxy -> " + text);
    Webbrowser1.Navigate(url)
}
于 2013-06-12T07:20:22.657 に答える