デバッグ中に、Timer.Stop()
またはTimer.Enabled = false
コマンドが実行された後に、Timerがまだ実行中であることがわかります(Timer.Enabled = true)。そんなことがあるものか?Windowsフォームタイマは停止しません。そんなことがあるものか?
答えて
あなたはワーカースレッドにタイマーを停止する場合、これは可能です。たとえば:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
Timer timer1;
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
timer1 = new Timer();
timer1.Interval = 3000;
timer1.Start();
var t = new System.Threading.Thread(stopTimer);
t.Start();
}
private void stopTimer() {
timer1.Enabled = false;
System.Diagnostics.Debug.WriteLine(timer1.Enabled.ToString());
}
}
出力:タイマーはUIスレッドによって停止されなければならない
真
、クラスが自動的にそれの世話をします。 Control.BeginInvoke()とよく似ています。明示的なレースがあり、Tickイベントハンドラは停止した後に実行できます。これは、作成した最初のタイマーがワーカースレッド上に作成されている場合に、UIスレッドでも発生します。たとえば、スプラッシュ画面。それは健康ではありません、あなたはそれを修正するべきです。
呼び出しを開始するStopを呼び出してTimerを無効にすると、Timerは中断された間隔を再開します。タイマーが5000ミリ秒の間隔で設定されていて、約3000ミリ秒でStopを呼び出す場合、Startを呼び出すと、タイマーはTickイベントを発生させる前に5000ミリ秒待機します。また、心のすべてのタイマーコンポーネントは、メインアプリケーションスレッドで動作するため、Windowsは、アプリケーション内の他のタイマーコンポーネントからのメッセージを引き起こす可能性があり、アプリケーションがすぐに処理されるようにフォーム内の任意のタイマーの停止を呼び出す
で
クマ。 2つのTimerコンポーネントがあり、1つが700ミリ秒に設定され、1つが500ミリ秒に設定され、最初のTimerでStopを呼び出すと、アプリケーションは2番目のコンポーネントのイベントコールバックを最初に受信することがあります。これが問題になることが判明した場合は、代わりにSystem.Threading名前空間でTimerクラスを使用することを検討してください。
http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.stop.aspx
public void EnableTimer(bool state)
{
if (this.InvokeRequired) {
this.Invoke(new Action<bool>(EnableTimer), state);
} else {
this.Timer1.Enabled = state;
}
}
- 1. 停止サービスは停止しません
- 2. Windows Phone 8.1バックグラウンドタスクが停止していませんか?
- 3. Windowsフォームタイマ
- 4. なぜこのループは停止できませんか?
- 5. FlaskサーバーはWindowsではCtrl + Cで停止しません
- 6. 私はタイマーを停止することはできません
- 7. Windowsサービスが開始してから停止しましたが、ログはありません
- 8. whileループは停止しますが、whileループは停止しません
- 9. Chromeデバッガが停止しません
- 10. プログレスバーが停止していません
- 11. setIntervalを停止することはできません
- 12. YouTubeは一時停止、再生&停止しません。
- 13. ffmpegは-shortestコマンドでもエンコードを停止しません
- 14. Android AsyncTaskはキャンセルされても停止しません。なぜですか?
- 15. WPF MVVM:ICommandパラメータがnullになることがあります(必ずしもそうではありません)
- 16. StopStoryboardは... BeginStoryboardを停止しません
- 17. スレッドはonPauseで停止しません
- 18. コルーチンはUnityを停止しません
- 19. SpeechUtanceは停止しません
- 20. Androidデバッグブリッジは停止しません
- 21. Android Java Runnableは停止しません
- 22. PDBはブレークポイントで停止しません
- 23. BroadcastReceiverはスレッドを停止しません。
- 24. Android:Handler.postDelayedは停止しません
- 25. blockUIは停止しません
- 26. StopForegroundはフォアグラウンドサービスを停止しません
- 27. アンドロイドサービスは停止しません
- 28. バッチコマンドは停止しません
- 29. MySQL whileループは停止しません
- 30. Python PDBは停止しません
...このコードを試してみてくださいあなたは、おそらくいくつかのコード –
を示さなければならないし、コードのほかに、どのようにそれを始めていますか? – gbianchi
@gbianchiコードのそばでどうやって始めますか? –