2012-02-28 2 views
2

私はC#とVisual Studio 2010を使用しています。これは大丈夫ですか、それとも変更する必要がありますか?値をスレッディングして返す

public bool SomeFunction(string arg1) 
{ 
    bool ok = false; 
    var firstThread = new Thread(delegate() 
            { 
             ok = SomeFunction2(arg1); 
            }); 

    firstThread.Start(); 
    firstThread.Join(); 

    return ok; 
} 
+3

あなたのご質問はありますか? –

+0

SomeFunction2が何をしているのか分からずに答えることができない(つまり、別のスレッドを作成する) – shanabus

+0

なぜ別のスレッドを生成して完了するのを待つのですか?あなたは何を達成したいですか? – BrokenGlass

答えて

2

このプロセスをどのくらいの期間実行しているかわかりませんもう一方のスレッドは - ですが、スレッドを開始してからそれに参加すると、混乱します。なぜなら、ジョイン呼び出しによって、呼び出しスレッドは、他のスレッドが終了するまでブロックされるからです。

しかし、実際に別のスレッドで実行するプロセスが必要な場合は、マルチスレッドを非常に簡単にするため、BackgroundWorkerを参照してください。バックグラウンドスレッド、進捗報告、キャンセル、および完了を管理するイベントにアタッチします。

助けが必要な場合はお知らせくださいが、ここではバックグラウンドワーカーの使用例です。

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

+0

スレッドは1つだけです。いくつかのfunction2はタスクを実行し、true/falseを返します。これは呼び出し元に戻す必要があります。だからあなたの説明から、私はthread.joinを取ることができますか? –

+0

情報をありがとう、あなたのリンクを見た後、私は何をすると思いますか? –

3

、それは私にはよさそうだ、あなたはokを返す前に(新しい値にキャプチャ変数ok設定)が完了したスレッドを待ちたいと仮定。

0

あなたの正確なコードは、あまり意味がありません。しかし、別のスレッドでコードを実行する何らかの理由がある場合は、これがうまくいくはずです。値を返すTaskを使用する方が良いかもしれませんが。

関連する問題