可以編寫能同時執(zhí)行多個任務(wù)的應(yīng)用程序。此能力(稱為“多線程處理”或“自由線程處理”)是設(shè)計處理器密集型且要求用戶輸入的組件的強大方法。計算工資表信息的組件就是一個可能利用多線程處理的組件示例。該組件可以在一個線程上處理用戶輸入到數(shù)據(jù)庫的數(shù)據(jù),而在另一個線程上執(zhí)行頻繁使用處理器的工資表計算。通過在不同的線程上運行這些進(jìn)程,用戶不必等到計算機(jī)完成計算,就可以輸入其他數(shù)據(jù)。在本演練中,將創(chuàng)建一個簡單的多線程組件,該組件可以同時執(zhí)行若干個復(fù)雜計算。
創(chuàng)建項目
應(yīng)用程序?qū)▎蝹€窗體和一個組件。用戶將輸入值并指示該組件開始計算。然后,窗體將接收來自該組件的值,將其顯示在標(biāo)簽控件中。該組件將執(zhí)行頻繁使用處理器的計算,并在完成后通知窗體。您將在組件中創(chuàng)建公共變量,用以保存從用戶界面收到的值。同時,您還將在組件中實現(xiàn)一些方法,根據(jù)這些變量的值執(zhí)行計算。
注意 盡管對于計算值的方法來說,函數(shù)通常更為可取,但不能在線程之間傳遞參數(shù),也不能返回值。有很多向線程提供值和從線程接收值的簡單方法。在本演示中,將通過更新公共變量將值返回到用戶界面,當(dāng)線程執(zhí)行完畢后,使用事件來通知主程序。
創(chuàng)建窗體
創(chuàng)建新的“Windows 應(yīng)用程序”項目。
將應(yīng)用程序命名為 Calculations,并將 Form1.cs 重命名為 frmCalculations.cs。
該窗體將用作應(yīng)用程序的主用戶界面。
雙擊設(shè)計器上的窗體以打開代碼編輯器。在“編輯”菜單中,選擇“查找和替換”,然后選擇“替換”。使用“全部替換”將 Form1 替換為 frmCalculations。
在“解決方案資源管理器”中,右擊“frmCalculations.cs”并選擇“視圖設(shè)計器”。設(shè)計器打開。
向窗體中添加 5 個 Label 控件、4 個 Button 控件和 1 個 TextBox 控件。
為這些控件設(shè)置屬性,如下所示:
控件 名稱 文本
Label1 lblFactorial1 (空白)
Label2 lblFactorial2 (空白)
Label3 lblAddTwo (空白)
Label4 lblRunLoops (空白)
Label5 lblTotalCalculations (空白)
Button1 btnFactorial1 Factorial
Button2 btnFactorial2 Factorial - 1
Button3 btnAddTwo Add Two
Button4 btnRunLoops Run a Loop
Textbox1 txtValue (空白)
創(chuàng)建項目
應(yīng)用程序?qū)▎蝹€窗體和一個組件。用戶將輸入值并指示該組件開始計算。然后,窗體將接收來自該組件的值,將其顯示在標(biāo)簽控件中。該組件將執(zhí)行頻繁使用處理器的計算,并在完成后通知窗體。您將在組件中創(chuàng)建公共變量,用以保存從用戶界面收到的值。同時,您還將在組件中實現(xiàn)一些方法,根據(jù)這些變量的值執(zhí)行計算。
注意 盡管對于計算值的方法來說,函數(shù)通常更為可取,但不能在線程之間傳遞參數(shù),也不能返回值。有很多向線程提供值和從線程接收值的簡單方法。在本演示中,將通過更新公共變量將值返回到用戶界面,當(dāng)線程執(zhí)行完畢后,使用事件來通知主程序。
創(chuàng)建窗體
創(chuàng)建新的“Windows 應(yīng)用程序”項目。
將應(yīng)用程序命名為 Calculations,并將 Form1.cs 重命名為 frmCalculations.cs。
該窗體將用作應(yīng)用程序的主用戶界面。
雙擊設(shè)計器上的窗體以打開代碼編輯器。在“編輯”菜單中,選擇“查找和替換”,然后選擇“替換”。使用“全部替換”將 Form1 替換為 frmCalculations。
在“解決方案資源管理器”中,右擊“frmCalculations.cs”并選擇“視圖設(shè)計器”。設(shè)計器打開。
向窗體中添加 5 個 Label 控件、4 個 Button 控件和 1 個 TextBox 控件。
為這些控件設(shè)置屬性,如下所示:
控件 名稱 文本
Label1 lblFactorial1 (空白)
Label2 lblFactorial2 (空白)
Label3 lblAddTwo (空白)
Label4 lblRunLoops (空白)
Label5 lblTotalCalculations (空白)
Button1 btnFactorial1 Factorial
Button2 btnFactorial2 Factorial - 1
Button3 btnAddTwo Add Two
Button4 btnRunLoops Run a Loop
Textbox1 txtValue (空白)

