0

我在一个应用程序上工作,该应用程序具有分散在代码库中的数千个方法,这些方法应该在主线程上调用。许多类不必要地从某种 UI 控件派生,因此,调用方法或属性可能会引发跨线程异常。

我想通过做以下两件事之一来停止这个问题而不改变一切:

  1. 向需要在主线程上调用的方法和属性添加注释。这是蹩脚的,但必须这样做。
  2. 我希望添加某种属性以自动将请求推送到主线程。

以下是可能的,如果是这样,我怎么能做到这一点。

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);
}

任何帮助将不胜感激。提前致谢!

4

1 回答 1

1

哪有这回事。你可以做的最好的减少样板,可能是将样板包裹在一个助手中。这篇 CodeProject 文章为您提供了一个示例:http: //www.codeproject.com/Articles/37642/Avoiding-InvokeRequired

于 2013-12-19T00:21:22.900 回答