Multithreading 在WinForms中是否有强制方法在主线程上运行的属性?
我在一个应用程序上工作,该应用程序中有数千个方法分散在代码库中,应该在主线程上调用这些方法。许多类不必要地派生自某种类型的UI控件,因此,调用方法或属性可能会引发跨线程异常 我想通过做以下两件事中的一件来停止这个问题,而不改变一切:Multithreading 在WinForms中是否有强制方法在主线程上运行的属性?,multithreading,winforms,Multithreading,Winforms,我在一个应用程序上工作,该应用程序中有数千个方法分散在代码库中,应该在主线程上调用这些方法。许多类不必要地派生自某种类型的UI控件,因此,调用方法或属性可能会引发跨线程异常 我想通过做以下两件事中的一件来停止这个问题,而不改变一切: 向需要在主线程上调用的方法和属性添加注释。这是站不住脚的,但必须做到 我希望添加某种属性来自动将请求推送到主线程上 以下是可能的,如果是的话,我如何才能做到这一点 public class MyCustomClass : Form { [MustInvoke
public class MyCustomClass : Form
{
[MustInvokeOnMainThread]
public string MyProperty
{
get { return ... }
}
[MustInvokeOnMainThread]
public void MyMethod(string x, int y)
{
...
}
}
public class NotOnMainThreadClass
{
MyCustomClass form;
...
public void Method()
{
// can this call automatically be invoked on main thread?
form.MyMethod("asdf", 0);
}
}
是否有与[MustInvokeOnMainThread]
等效的东西?我厌倦了编写这样的代码:
public void Method()
{
if (form.InvokeRequired)
{
from.Invoke(new Action(Method));
return;
}
form.MyMethod("asdf", 0);
}
任何帮助都将不胜感激。提前谢谢 没有这样的事。减少锅炉板的最佳方法可能是将锅炉板包裹在辅助设备中。这篇CodeProject文章为您提供了一个这样的例子:没有这样的东西。请看:David,我很抱歉在回复您的评论时出现了巨大的延迟。谢谢你的反馈,你说得很对:没有办法做到这一点。我希望你能贴出这个问题的答案,因为我会接受它。另外,感谢您的代码项目链接——非常有用。我会尽力说服这里的人使用它提供的东西!好的,我把我的评论变成了答案。这不是我写过的最有见地的回答,但你看。你自找的。;-)