0

.net 4.0に単純なタイマーがあり、間隔は1000(= 1秒)に設定され、有効=trueです。タイマーを開始するには、を使用します.Start()。これまでのところ、すべて正常に動作しています。

それからタイマーのイベントで私はこれを手に入れました:

private void MyTimerEvent()
{
    myTimer.Stop();
    myTimer.Start();

    //Some other work is done not related to the timer
}

問題は、タイマーイベントが実行されるとすぐに、イベントのスローが停止しenabled = false、myTimer.Start()の後でさえも設定されているように見えることです。時折。しかし、私はまったく設定していませんenabled = falseか?

私は何が間違っているのですか?

編集:System.Windows.Forms.Timer私が使用するものです。

4

2 に答える 2

1

あなたがそれを呼び出す場合StopForms.Timerそれは単にEnabled=False。と同じStartです。タイマーがすでに実行されているため、タイマーがenabledある場合は呼び出す必要はありません。StartあなたはReflectorらで自分自身をチェックすることができます:

[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    public void Start()
    {
        this.Enabled = true;
    }

    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    public void Stop()
    {
        this.Enabled = false;
    }
于 2012-11-16T10:26:17.937 に答える
0

Start at initメソッドを使用していますが、イベントのStop / Startは、現在のカウントを0(最初からやり直す)に設定することです。これは、イベントがへの別のコールバックによってトリガーされる可能性があるためです。

それはおそらくあなたの問題です。Start/を使用している場合は、タイマーを共有しないでくださいStop。代わりに、キューを使用する必要があります。キューは、によって処理されますBackgroundThread

于 2012-11-16T11:17:01.183 に答える