私がしたいこと。SomeMethod が定期的に呼び出されるようにしたい。したがって、バックグラウンド スレッド メソッドの本体が渡された後、バックグラウンド スレッドからタイマーが開始されるようにしたいと考えています。_timer.Start()
呼び出されましたが、TickHandler は呼び出されません。
コード:
using Timer = System.Windows.Forms.Timer;
class TestTimer
{
private Timer _timer;
private Thread _thread;
public TestTimer()
{
// create and initializing timer. but not started!
_timer = new Timer();
_timer.Tick += TickHandler;
_timer.Interval = 60000; // 1 minute
// create and start new thread
_thread = new Thread(SomeMethod);
_thread.Start();
}
private void TickHandler(object sender, EventArgs e)
{
// stop timer
_timer.stop();
//some handling
// run background thread again
_thread = new Thread(SomeMethod);
_thread.Start();
}
private void SomeMethod()
{
// some operations
// start timer!
TimerStart();
}
private void TimerStart()
{
_timer.Start();
}
}
このようにデリゲートを追加すると、サルの方法で見つけました
internal delegate void TimerDelegate();
そして文字列を置き換えます
TimerStart();
と
Application.Current.Dispatcher.Invoke(new TimerDelegate(TimerStart), null);
すべて正常に動作します。誰かがトリックとは何かを説明できますか?