一般我們在使用程式語言開發時,不管是Java或是C#都會使用到Thread.Sleep()來幫我們延後處理的時間,但是在撰寫Windows store App時卻沒有Thread.Sleep()可以使用…,糟糕這種情況該怎麼辦呢?!
本文將引導您使用Task取代Thread.Sleep()的使用方法。
一般我們在使用程式語言開發時,不管是Java或是C#都會使用到Thread.Sleep()來幫我們延後處理的時間,但是在撰寫Windows store App時卻沒有Thread.Sleep()可以使用…,糟糕這種情況該怎麼辦呢?!
本文將引導您使用Task取代Thread.Sleep()的使用方法。
首先這是我們一般載Windows Phone 中會用的Thread語法,我們必須馬下面的程式碼裝載到Thread裡面否則會將UI卡死。
1: public void Thread_Sample() {
2: int a = 10;
3: Thread.Sleep(500);//延遲500毫秒
4: int b = 20;
5: Thread.Sleep(500);//延遲500毫秒
6: int c = 30;
7: Thread.Sleep(500);//延遲500毫秒
8: int total = a + b + c;
9: Thread.Sleep(500);//延遲500毫秒
10: int average = total / 3;
11: Thread.Sleep(500);//延遲500毫秒
12:
13: }
那在Windows store App下沒有Thread 怎麼辦?!
在寫Windows store app 與 Windows Phone 的時候C#就提供了一個非常棒的改善方式利用async及await就可以幫我們把該方法另開一個新的線程執行,並且不會拖死UI。
我們需要使用async的方法以及await等待完成,並且使用 await Task.Delay();來代替Thread.Sleep() :
1: public async void Thread_Sample() {
2: int a = 10;
3: await Task.Delay(500);//延遲500毫秒
4: int b = 20;
5: await Task.Delay(500);//延遲500毫秒
6: int c = 30;
7: await Task.Delay(500);//延遲500毫秒
8: int total = a + b + c;
9: await Task.Delay(500);//延遲500毫秒
10: int average = total / 3;
11: await Task.Delay(500);//延遲500毫秒
12:
13: }
兩種寫法的效果其實是一樣的
如此一來就解決了在撰寫Windows store app時沒有Thread.Sleep()的窘境。
References: Thread.Sleep replacement in .NET for Windows Store
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處,並且附上本篇文章網址 ! 感謝。