2011-12-09 5 views
3

私はこのような自分のアプリケーション内のタスクを使用しよう:タスクでブロックしていますか?

Task test; 
test = Task.Factory.StartNew(() => general.Login(loginName, password)); 
MyTextBox.Text = "test text"; 

それは、この呼び出しを行うと、私はそれがサービスからワーカースレッドが戻るまでブロックする必要がありますが、私はしたくないUIスレッドになりますUIがフリーズします。

私はContinueWithを使うことができましたが、これはログイン方法を分割するため、これは難しくなります。また、このメソッドでコードの残りの部分を実行するには、メインのUIスレッドが必要です。

どうすれば解決できますか?

+0

非同期-CTPを使用するか、UIスレッドのブロック場合、UIがフリーズC#5 – CodesInChaos

+0

待つ:何ができることのようなものです。タスクが完了するのを待っている間にモーダルフォームを表示しますか? –

+0

@CodeInChaos>この問題についてC#5に関するさらに詳しい情報を提供していただけたら幸いですか? – Banshee

答えて

8

これは、C#5のasyncが解決する問題です。現時点では、基本的にコードを分割する必要があります。それは痛みですが、それはそうです。 (あなたの説明は少しばかりではありません - あなたはではありません UIスレッドをブロックしたい...ワーカースレッドが戻るまで "ロジックの2番目の部分を実行しません"。 :)(UIの他のビットを無効にしたいかもしれませんが、わかりません)

非同期機能の先頭に立つ価値があります。多くのリソースについてはVisual Studio async home pageを参照してください。

0

待機中のスレッドをブロックせずにスレッドを待つ方法はありません。

fire task 
do some other task 
wait for task // hopefully the task finished by now 
関連する問題