は、ループを使用Timer
を使用し、上のチェックボックスの状態に応じてオフを切り替えないでください。
// your loop replacement: a timer
Timer timer;
// this method is called periodically by the timer - do whatever you want here
// but make sure you use proper dispatching when accessing the UI (!)
private void MyTimerCallback(object state)
{
System.Diagnostics.Debug.WriteLine("Action!");
}
// this creates and starts the timer
private void StartTimer()
{
// set the timer to call your function every 500ms
timer = new Timer(MyTimerCallback, null, 500, 500);
}
// stop the timer
private void StopTimer()
{
timer.Dispose();
}
// Checked handler for the checkbox: start the timer
private void checkBox1_Checked(object sender, RoutedEventArgs e)
{
StartTimer();
}
// Unchecked handler for the checkbox: stop the timer
private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
{
StopTimer();
}
コールバック(「MyTimerCallback」)に関するいくつかの注意事項:
タイマーを作成したスレッド上で実行しない方法。 は、システムによって提供されるThreadPoolスレッドで実行されます。 (出典:Timer
のドキュメント)
これは重要であり、あなたは、このメソッドから直接、任意のUI要素にアクセスしないように指示します。代わりに次のようなことをしてください:
textBlock1.Dispatcher.BeginInvoke(() => { textBlock1.Text = "Changed text"; });
これは本当にうまくいきました –
良いです。一般的な経験則として、メインスレッドでビジーループを作成しないでください代わりに 'Timer'のようなコールバック機構やスレッドベースの代替手段を使用してください。 –