0

私は、メイン スレッドで呼び出す必要があるコード ベース全体に数千のメソッドが散らばっているアプリケーションに取り組んでいます。多くのクラスは、何らかの UI コントロールから不必要に派生するため、メソッドまたはプロパティを呼び出すと、クロススレッド例外が発生する可能性があります。

次の 2 つのいずれかを実行して、すべてを変更せずにこの問題を解決したいと考えています。

  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 に答える