我有一个带有按钮的 Windows 窗体。我单击该按钮,它会在一个单独的类中启动一个方法。我在一个单独的线程中启动此方法。
当这个 class.method 完成时,它会引发一个事件回到 windows 窗体类。
发生这种情况时,我在该单独的类中启动另一个方法,该方法告诉启用 system.windows.form 计时器(在该类中声明)并因此开始处理。
但是计时器没有启动(我确实在 'tick' 事件中设置了一个断点)。
我假设这是因为我在代码开始时在调用线程之外声明了计时器。
通常,我会使用它来调用同一线程上的方法...
this.invoke(mydelegatename, any pars);
但是,不能用类调用“this”,因为它与 UI 线程相关。
我知道这一切看起来很糟糕的架构,我可以通过将计时器移动到 UI 线程(Windows 窗体类)来轻松解决这个问题。
但是,我已经忘记了多年前我是如何做到这一点的,这确实是一种封装我的代码的尝试。
任何人都可以启发我吗?
谢谢
编码:
[视窗类]
_webSync = new WebSync(Shared.ClientID);
_webSync.evBeginSync += new WebSync.delBeginSync(_webSync_evBeginSync);
Thread _thSync = new Thread(_webSync.PreConnect);
_thSync.Start();
private void _webSync_evBeginSync()
{
_webSync.Connect();
}
[WebSync 类]
private System.Windows.Forms.Timer _tmrManifestHandler = new System.Windows.Forms.Timer();
public WebSyn()
{
_tmrManifestHandler.Tick += new EventHandler(_tmrManifestHandler_Tick);
_tmrManifestHandler.Interval = 100;
_tmrManifestHandler.Enabled = false;
}
public delegate void delBeginSync();
public event delBeginSync evBeginSync;
public void PreConnect()
{
while (true)
{
if (some condition met)
{
evBeginSync();
return ;
}
}
}
public void Connect()
{
_tmrManifestHandler.Enabled = true;
_tmrManifestHandler.Start();
}
private void _tmrManifestHandler_Tick(object sender, EventArgs e)
{
//NOT BEING 'HIT'
}