欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C#對Windows窗體控件進(jìn)行線(xiàn)程安全調用

如果使用多線(xiàn)程來(lái)提高 Windows 窗體應用程序的性能,則必須確保以線(xiàn)程安全方式調用控件。

訪(fǎng)問(wèn) Windows 窗體控件本質(zhì)上不是線(xiàn)程安全的。 如果有兩個(gè)或多個(gè)線(xiàn)程操作某一控件的狀態(tài),則可能會(huì )迫使該控件進(jìn)入一種不一致的狀態(tài)。 還可能會(huì )出現其他與線(xiàn)程相關(guān)的 Bug,例如爭用情況和死鎖。 確保以線(xiàn)程安全方式訪(fǎng)問(wèn)控件非常重要。

在未使用 Invoke 方法的情況下,從不是創(chuàng )建某個(gè)控件的線(xiàn)程的其他線(xiàn)程調用該控件是不安全的。 以下非線(xiàn)程安全的調用的示例。

.NET Framework 可幫助您檢測以非線(xiàn)程安全方式訪(fǎng)問(wèn)控件這一問(wèn)題。 在調試器中運行應用程序時(shí),如果一個(gè)不是創(chuàng )建某個(gè)控件的線(xiàn)程的其他線(xiàn)程調用該控件,則調試器會(huì )引發(fā)一個(gè) InvalidOperationException,并顯示以下消息:“從不是創(chuàng )建控件控件名稱(chēng) 的線(xiàn)程訪(fǎng)問(wèn)它?!?/a>

此異常在調試期間和運行時(shí)的某些情況下可靠地發(fā)生。 在調試以 .NET Framework 2.0之前的 .NET Framework 編寫(xiě)的應用程序時(shí),可能會(huì )出現此異常。 我們強烈建議您在發(fā)現此問(wèn)題時(shí)進(jìn)行修復,但您可以通過(guò)將CheckForIllegalCrossThreadCalls 屬性設置為 false 來(lái)禁用它。 這會(huì )使控件像在 Visual Studio .NET 2003 和 .NET Framework 1.1 中一樣運行。

對 Windows 窗體控件進(jìn)行線(xiàn)程安全調用

  1. 查詢(xún)控件的 InvokeRequired 屬性。
  2. 如果 InvokeRequired 返回 true,則使用實(shí)際調用控件的委托來(lái)調用 Invoke。
  3. 如果 InvokeRequired 返回 false,則直接調用控件。

在下面的代碼示例中,將在由后臺線(xiàn)程執行的 ThreadProcSafe 方法中實(shí)現線(xiàn)程安全調用。 如果 TextBox控件的 InvokeRequired 返回 true,則 ThreadProcSafe 方法會(huì )創(chuàng )建 SetTextCallback 的一個(gè)實(shí)例,并將該實(shí)例傳遞給窗體的 Invoke 方法。 這使得 SetText 方法被創(chuàng )建 TextBox 控件的線(xiàn)程調用,而且在此線(xiàn)程上下文中將直接設置 Text 屬性。

使用 BackgroundWorker 進(jìn)行線(xiàn)程安全調用

在應用程序中實(shí)現多線(xiàn)程的首選方式是使用 BackgroundWorker 組件。 BackgroundWorker 組件使用事件驅動(dòng)模型實(shí)現多線(xiàn)程。 后臺線(xiàn)程運行 DoWork 事件處理程序,而創(chuàng )建控件的線(xiàn)程運行 ProgressChanged 和RunWorkerCompleted 事件處理程序。 可以從 ProgressChanged 和 RunWorkerCompleted 事件處理程序調用控件。

使用 BackgroundWorker 進(jìn)行線(xiàn)程安全調用

  1. 創(chuàng )建一個(gè)方法,該方法用于執行您希望在后臺線(xiàn)程中完成的工作。 不要調用由此方法中的主線(xiàn)程創(chuàng )建的控件。
  2. 創(chuàng )建一個(gè)方法,用于在后臺工作完成后報告結果。 在此方法中可以調用主線(xiàn)程創(chuàng )建的控件。
  3. 將步驟 1 中創(chuàng )建的方法綁定到 BackgroundWorker 的實(shí)例的 DoWork 事件,并將步驟 2 中創(chuàng )建的方法綁定到同一實(shí)例的 RunWorkerCompleted 事件。
  4. 若要啟動(dòng)后臺線(xiàn)程,請調用 BackgroundWorker 實(shí)例的 RunWorkerAsync 方法。

在下面的代碼示例中,DoWork 事件處理程序使用 Sleep 來(lái)模擬需要花費一些時(shí)間完成的工作。 它不調用窗體的 TextBox 控件。 TextBox 控件的 Text 屬性在 RunWorkerCompleted 事件處理程序中直接設置。

也可以使用 ProgressChanged 事件來(lái)報告后臺任務(wù)的進(jìn)度。 有關(guān)包含該事件的示例,請參見(jiàn)BackgroundWorker。

雖然多線(xiàn)程處理最適于運行過(guò)程和類(lèi)方法,它也可以用于窗體和控件。使用時(shí),請注意以下幾點(diǎn):

參考:

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
對 Windows 窗體控件進(jìn)行線(xiàn)程安全調用 - 夜淡茶清.shenfx - 博客園
多線(xiàn)程中使用CheckForIllegalCrossThreadCalls=false訪(fǎng)問(wèn)窗口
C#教程:線(xiàn)程應用實(shí)例
C#中的跨線(xiàn)程調用
C#多線(xiàn)程窗體控件安全訪(fǎng)問(wèn)
Invoke and BeginInvoke
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久