很多時候,我們要實現Winform異步操作,你可以用傳統的方法,但個人感覺代碼不好理解,而且使用真有點不舒服。也可以用Task來實現,Task(.net4.0新添加的對象)其實就是對線程池線程的一個封裝,裡面功能比較多,也比較好操作,其他的不多講,今天只講異步操作,舉個簡單的例子吧:
先上個圖:單擊Go按鈕,數字自動增加,比較簡單。
直接上代碼:
CancellationTokenSource cts = ; taskScheduler = UpdateText( ( btnTask.Invoke( Action<> btnTask.Text = Thread thread = Thread(() => ( i = ; ; i++ Thread.Sleep( 34 (cts == cts = Task.Factory.StartNew(() => ( i = ; ; i++ Thread.Sleep( Task.Factory.StartNew(() => btnTask.Text = btnTask_Click( }
如果是在WPF當中,傳統的方法還得改點代碼,而用Task不需要修改代碼,TaskScheduler.FromCurrentSynchronizationContext()能夠獲取當前是Winform線程還是WPF線程,而且傳統方法中UpdatText方法老覺得看著有點別扭,用Task只需在Task中再開啟一個Task即可。