我在一个应用程序上工作,该应用程序具有分散在代码库中的数千个方法,这些方法应该在主线程上调用。许多类不必要地从某种 UI 控件派生,因此,调用方法或属性可能会引发跨线程异常。
我想通过做以下两件事之一来停止这个问题而不改变一切:
- 向需要在主线程上调用的方法和属性添加注释。这是蹩脚的,但必须这样做。
- 我希望添加某种属性以自动将请求推送到主线程。
以下是可能的,如果是这样,我怎么能做到这一点。
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);
}
任何帮助将不胜感激。提前致谢!