Thread.TimersのMSDNサンプル(http://msdn.microsoft.com/en-us/library/swx5easy.aspx)を自分のコードで実装しようとしています。
特定のユーザーアクションが実行されたときにタイマーをキャンセルできるようにしたいのですが、タイマーを破棄できません。これは、別のクラスからメソッドを呼び出しているため、調整する必要があるためと思われます。でもどこかわかりません。
これ以外は、タイマーは正常に動作します。btnconfigOpenConfigが呼び出されたときにタイマーがキャンセルされない理由を誰かが理解できますか?
参考までに、私はワーカープロセスであったものを時限イベントに変換しています。
public partial class Xservt : Window
{
internal class TimerStateObjClass
{
public int SomeValue;
public System.Threading.Timer SqlUpdateFromTwitterTimerReference;
public bool TimerCanceled;
}
internal void SomeMethod(){
TimerStateObjClass stateObj = new TimerStateObjClass();
stateObj.TimerCanceled = false;
stateObj.SomeValue = 100;
System.Threading.TimerCallback timerDelegate =
new System.Threading.TimerCallback(twit.hometimelineclass._sqlUpdateFromTwitterWorker_DoWork);
var sqlUpdateFromTwitterTimer = new Timer(timerDelegate, stateObj, 0,20000);
stateObj.SqlUpdateFromTwitterTimerReference = sqlUpdateFromTwitterTimer;
}
}
//action to perform which disposes the timer
private void btnconfigOpenConfig(object sender, RoutedEventArgs e)
{
TimerStateObjClass timerState = new TimerStateObjClass();
timerState.TimerCanceled = true;
}
//Actions the timer is calling, in another class
internal static void _sqlUpdateFromTwitterWorker_DoWork(object StateObj)
{
Xservt.TimerStateObjClass state = (Xservt.TimerStateObjClass) StateObj;
if(state.TimerCanceled)
{
state.SqlUpdateFromTwitterTimerReference.Dispose();
}
//some work
}