この文書の現在のバージョンと選択したバージョンの差分を表示します。
| — |
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; | ||
| + | } | ||
| + | |||
| + | |||
| + | ``` | ||