2009-04-01 13 views
1

からデータを取得:ネット:これは簡単Qですが、大きな助けスレッド

スレッド MSDN(Here)からタイトル」取得データの下では、コールバックを使用することによって、子スレッドからデータを取得する方法を紹介します子スレッドにメインスレッドから渡されたデリゲートによってカプセル化されている方法 - 。データを持っている

我々はあるので、あなたは、

マイQがある(MSDN pageで最後の例)はっきりそれを見ることができますデータを取得することを取る(子スレッドからマイへnスレッド)コールバックメソッドは、メインスレッドではなく、子スレッドで実行する必要があります。

コードを変更して(確認するため)、各出力の前にスレッドの名前を付けました。

public static void ResultCallback(int lineCount) { 
    Console.WriteLine(Thread.CurrentThread.Name + ":Independent task printed {0} lines.", lineCount); 
} 

そして、私は子スレッドの名前:メインスレッド「システム」しばらく「方法2」...

私はこの出力を得た:方法2:独立したタスクは、1行を印刷しました。

正しい出力がされている必要があります。システム:独立したタスクは、1行を印刷し...ここに酔っている

? MSDN、私​​または.NET?

答えて

0

"You" ;-p

コールバックはワーカースレッドでも実行されます。彼らはコードを呼び出してデータを返しますが、スレッドの呼び出しを中断する方法はありません。必要に応じて、その作業をメインスレッドにプッシュバックするのは、コードの責任です。例えば、リサイズにあなたが持つかもしれないアプリ:

public static void ResultCallback(int lineCount) { 
    // runs on worker thread 
    Invoke((MethodInvoker)delegate { 
     // runs on UI thread 
     Console.WriteLine(Thread.CurrentThread.Name + 
     ":Independent task printed {0} lines.", lineCount); 
    }); 
} 
+0

私は最初の部分を手に入れました しかし、私はどのように私はメインスレッドに戻って仕事をしないでください! – Shankarooni

+0

あなたはどのアーキテクチャを使用していますか? winforms?ウェブ? wpf?コンソール?サービス?それは... winformsによって異なります、Control.Invoke(上に示した)があります。 WPF/Silverlight、ディスパッチャなど - –

+0

私はスレッドを学習するためにコンソールを使用しています(うん、なぜInvokeキーワードに下線を引いていますか) – Shankarooni

0

あなたは/コールバックを使用する必要はありたくないと、データがかなり小さい場合は、常に共有メモリとC#のlockキーワードを使用することができます。

Maciej。

関連する問題