【发布时间】:2013-08-22 01:30:00
【问题描述】:
我想使用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 (as outlined by Kenny Kerr) 中实现了这个确切的机制,它按预期工作,但在这种情况下_timer 永远不会滴答作响。
我还阅读了 other SO articles 指出相同的行为,但无法弄清楚我的插件设置有什么不同?
编辑: OnEvent() 方法被触发。
【问题讨论】:
-
你的事件 onEvent 被触发了吗?
-
是的,事件触发了。
-
你有什么异常吗?
标签: c# multithreading com timer excel-addins