c# - 如何在类中调用控件

c# - 如何在类中调用控件

我有一个带有按钮的 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'

}

相关文章