问题 :在 .NET 3.5 WinForms 应用程序中,如何在不传递委托(delegate)的情况下从单独的线程访问/调用 UI 线程中的方法?
示例 :假设我有一些代码我想(a)在用户单击按钮时手动运行,以及(b)由在单独的非 mainUI 线程中运行但不传递委托(delegate)的进程定期调用。 [简单地说,我认为已经构造了具有此方法的类,并且主 UI 线程具有它的句柄,因此如果在单独线程中运行的进程可以从主 UI 中获取它的句柄线程它可以调用它。希望这不是一个有缺陷的概念]
背景 :我实际上是在为我的单独进程线程实际上是我使用quartz.net安排的工作的情况下执行上述操作的方法。调度程序的工作方式我似乎无法真正传递委托(delegate)。有一种方法可以传递 JobDetails,但它似乎只适合字符串、int 等。因此,我所追求的是一种访问 MainForm 类的方法,例如,从内部调用它的方法在单独的线程中运行的quartz.net 作业。
谢谢
最佳答案
假设您可以访问 MainForm,您可以简单地调用它的任何方法,但是这些方法将承担检查它们是否需要编码到 UI 线程并处理在那里传递的委托(delegate)的负担。
所以在你的主表单上你可以有一个方法:
public void UpdateProgress()
{
if( this.InvokeRequired )
{
this.Invoke(UpdateProgress);
return;
}
// do actual update of progress here
}
关于.net - WinForms - 如何在不传递委托(delegate)的情况下从单独的线程访问/调用 UI 线程中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526725/