この文書の現在のバージョンと選択したバージョンの差分を表示します。
— |
c.sharp:非同期 [2018/05/05 09:18] (現在) fifi 作成 |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
+ | |||
+ | 以下のコードの場合UIが動かなくなる | ||
+ | ```c | ||
+ | private void timer_MainSchedulerTimer_Tick(object sender, EventArgs e) | ||
+ | { | ||
+ | this.timer_MainSchedulerTimer.Enabled = false; | ||
+ | |||
+ | /* 待つ */ | ||
+ | Thread.Sleep(10 * 1000); | ||
+ | Debug.WriteLine("waitt"); | ||
+ | |||
+ | this.timer_MainSchedulerTimer.Enabled = true; | ||
+ | } | ||
+ | |||
+ | |||
+ | 以下のコードだと、UIは固まる。 | ||
+ | asyncを付けても意味ない。 | ||
+ | private async void timer_Tick(object sender, EventArgs e) | ||
+ | { | ||
+ | this.timer_MainSchedulerTimer.Enabled = false; | ||
+ | |||
+ | /* 待つ */ | ||
+ | Debug.WriteLine("Wait Start"); | ||
+ | Thread.Sleep(10 * 1000); | ||
+ | Debug.WriteLine("Wait End"); | ||
+ | |||
+ | this.timer_MainSchedulerTimer.Enabled = true; | ||
+ | } | ||
+ | |||
+ | 以下のコードだと、UIはかたまらない。 | ||
+ | (awaitが使用される場合は, asyncを付けていないとコンパイルエラーが発生する) | ||
+ | private async void timer_Tick(object sender, EventArgs e) | ||
+ | { | ||
+ | this.timer_MainSchedulerTimer.Enabled = false; | ||
+ | |||
+ | /* 待つ */ | ||
+ | await Task.Run(() => | ||
+ | { | ||
+ | Debug.WriteLine("Wait Start"); | ||
+ | Thread.Sleep(10 * 1000); | ||
+ | Debug.WriteLine("Wait End"); | ||
+ | }); | ||
+ | |||
+ | this.timer_MainSchedulerTimer.Enabled = true; | ||
+ | } | ||
+ | |||
+ | |||
+ | ``` |