[筆記]C# Windows 8 & 8.1 開發,解決沒有Thread.Sleep()的替代方案。

  • 3738
  • 0
  • C#
  • 2015-06-10

一般我們在使用程式語言開發時,不管是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

 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處,並且附上本篇文章網址 !  感謝。

SUKI

HOLIESTAR