私は非同期CTPでいくつかのプローブを作っていますが、GUIがブロックされているので良い結果を得られません。async CTP:何かが間違っている、GUIがブロックされている
私はボタンとログ用のテキストボックスを持つWPFアプリケーションを持っています。間違っていないよ場合(この場合はイベントをクリックしてください)「同期」との方法を設定し、それがメソッドに実行にポイントを戻すために、方法はのawaitを使ってみましょう、
private async void btnAsync01_Click(object sender, RoutedEventArgs e)
{
UpdateTxtLog("Enter in Button Async01: " + System.DateTime.Now);
await metodo01Async();
UpdateTxtLog("Exit button Async01: " + System.DateTime.Now);
}
private async Task slowMethodAsync()
{
UpdateTxtLog("Enter in slowMethod: " + System.DateTime.Now);
Thread.Sleep(5000);
UpdateTxtLog("Exit slowMethod: " + System.DateTime.Now);
}
:それから私はこのコードを持っています実際のメソッドを呼び出すと、実行はGUIに戻ります。
GUIでは、ボタンをクリックしてから、slowMethodを待つclickイベントで、slowMethodを使ってどのように待っているのですか?コントロールはGUIに返され、GUIはブロックされません。ただし、GUIはブロックされており、slowMethodが終了するまでtxtLogは情報を表示しません。
これはslowMethodがGUIと同じスレッドで実行されるためですか?私が間違っている場合、asyncは通常、awaitメソッドを呼び出すメソッドと同じスレッドを使用しますが、非同期の理由がこれを回避すると思います。
slowMethodをthread.Seepなしでシミュレートするにはどうすればよいですか? slowMethodではスレッドをスリープさせ、slowMethodのスレッドはGUIと同じであるため、おそらくこれが問題です。
これは、私はいつも非同期メソッドのコードを他のスレッドで実行することをお勧めしていると思いますか?これが正しければ、私はメインスレッドをブロックしないためにタスクを使用する必要がある場合は非同期を使用する意味ですか?
非同期を使用するタイミングとタスクを使用するタイミングを教えてください。このプローブについて
が、私はこのウェブの例を以下しています。この例ではhttp://www.codeproject.com/Articles/127291/C-5-0-vNext-New-Asynchronous-Pattern
、それがslowMethodとしてclient.DownloadStringTaskAsyncを使用していますが、私の場合は、代わりにWebクライアントを使用しての、私はダミーのメソッドを使用しますslowMethodをシミュレートするためにスリープ状態にします。私はそれがユニークな違いだと思う。
ありがとうございました。 ダイムロク。