私は、接続の数(それぞれが1つずつ行われる)のためのSQL接続文字列をテストする必要がある小さなアプリケーションを持っています。これを行うには、接続が有効でなく、ConnectionTimeout = 0
(永遠に待機する)と言うと、長い待ち時間を避けるためにConnectionTimeout = 5
を一時的に設定します。我々はOpen()
に接続不良を(たとえConnectionTimeout = 5
でSqlException
ための待ち時間が20秒まで可能)しようとしながら、ぶら下がっUIを避けるためにTPL
、私はタスク並列ライブラリ(TPLを使用して別のスレッドでテストを実行したいです)。だから私はスピンオフのように私の新しいスレッド:
Task<bool> asyncTestConn = Task.Factory.StartNew<bool>
(() => TestConnection(conn, bShowErrMsg));
return asyncTestConn.Result;
問題は、それは、呼び出し元に戻る前に、結果を待っているようこれはまだ、(明らかに)UIをロックしていることです。非同期Task
からの最終結果を取得しながら、コードがUIに制御を戻す(GUIを解放する)ようにするにはどうすればよいですか?
また、Task
内から、私は正当にMessageBox.Show("Some message")
を行うことができますか?これはBackgroundWorkers
では機能せず、このpooled-threadはデフォルトでバックグラウンドスレッドです。それでも問題はないようです。御時間ありがとうございます。待機が発生した場所
お返事ありがとうございました。全体のアイデアは、できるだけ早くUI/GUIに戻って制御を戻すことです、どのように/上記の達成することができますか?上記のコードを 'ParrTestConn(SqlConnection conn、string bShowErrMsg)'メソッドから呼び出すと、 'asyncTestConn.ContinueWith(ParrTestConn(conn、bShowErrMsg)) 'と言うことはできません。 – MoonKnight
@Killer Start()の後に戻ります。これを使用するとき、GUIは反応し続ける必要があります。 –
'Task.Factory.Create'メソッドは使用できません。 –
MoonKnight