System.Windows.Forms.Timer
を使用して、作成中の Excel アドインの UI スレッドでイベントが発生するようにしたいと考えています。次のようにタイマーを作成します。
private System.Windows.Forms.Timer _timer;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Debug.WriteLine("ThisAddIn_Startup:" + Thread.CurrentThread.ManagedThreadId);
_timer = new System.Windows.Forms.Timer();
_timer.Tick += new EventHandler(TimerEventHandler);
_timer.Interval = 500;
}
タイマーは、使用しているライブラリの COM イベントによって起動されます。
private void OnEvent()
{
_timer.Start();
}
_timer
次に、ティック時に次のメソッドを呼び出すことを期待しています。
public void TimerEventHandler(object sender, EventArgs args)
{
_timer.Stop();
Debug.WriteLine("Tick: " + Thread.CurrentThread.ManagedThreadId);
}
私が理解しているように、アドインスレッドでタイマーを作成すると、別のスレッド (この場合は COM イベント) から開始されても、作成されたスレッド、つまりアドインスレッドで起動する必要があります。ただし、これは起こりません。
私はこの正確なメカニズムをRTDServer
私が過去に書いたもの ( Kenny Kerr によって概説されているように)に実装しました_timer
。
同じ動作を指摘している他の SO 記事も読みましたが、アドインの設定の違いがわかりません。
編集: OnEvent() メソッドが起動されます。