質問

私はまだc#に新しく、特にC#でスレッドをスレッド化しています。 私はシングルスレッドアパートを必要とする関数を始めようとしています( stathread

しかし、私は次のコードをコンパイルすることはできません:

関数は、MyClassと呼ばれる別のクラスで次のようになっています。

internal static string DoX(string n, string p)
        {
            // does some work here that requires STAThread
        }
.

関数の上に属性[Stathread]を試してみましたが、それは機能しません。

だから私は次のように新しいスレッドを作成しようとしています:

 Thread t = new Thread(new ThreadStart(MyClass.DoX));
.

しかしこれはコンパイルされません(最良のオーバーロードされたメソッドは無効な引数エラーを持ちます)。しかしオンラインの例は非常に似ています>(ここでの例) 私は間違っていることが何をしているのか、新しいSTAスレッドで機能を実行する方法を簡単にすることができますか?

ありがとう

役に立ちましたか?

解決

Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
.

値が必要な場合は、変数に戻すのを「キャプチャ」できますが、他のスレッドの終わりまでの値はその値を持たないことに注意してください。

int retVal = 0;
Thread thread = new Thread(() => {
    retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
.

またはおそらくより単純な:

Thread thread = new Thread(() => {
    int retVal = MyClass.DoX("abc", "def");
    // do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top