我想使用 aSystem.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() 方法被触发。