私自身のコードでThread.TimersのMSDNの例(http://msdn.microsoft.com/en-us/library/swx5easy.aspx)を実装しようとしています。スレッドタイマーを別のクラスから取り消す
特定のユーザーアクションが実行されたときにタイマーを取り消すことができますが、タイマーを破棄することはできません。別のクラスのメソッドを呼び出して調整する必要があるためです。私はどこが分からないのですか?
これ以外の場合、タイマーは正常に動作します。 btnconfigOpenConfigが呼び出されたときに私のタイマーがキャンセルされない理由を誰でも見ることができますか?
FYI私はワーカープロセスをタイムドイベントに変換しています。
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
}
TimerStateObjClassの* new *オブジェクトを作成しています。それがうまくいかない場合は、クラスにプライベートフィールドを追加してください。 –
からTimerStateObjClass? TimerStateObjClassタイプの – Damo
、はい。 –