如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題

這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題,文章內(nèi)容步步緊湊,希望大家根據(jù)這篇文章可以有所收獲。

唐山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

問(wèn)題出現(xiàn):

在WinForm 處理多線程訪問(wèn)主線程的控件時(shí)候,就會(huì)出現(xiàn)如圖所示的錯(cuò)誤對(duì)話框:

 如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題

解決方案:

 方案一:去掉線程訪問(wèn)主線程UI控件的安全檢查,使用:

 Control.CheckForIllegalCrossThreadCalls = false;

如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題

方案二:使用委托,將對(duì)主線程的UI控件操作推送了該線程的消息隊(duì)列里,使用的方法為:Invoke方法和BeginInvoke方法,前一個(gè)是同步方法,后一個(gè)為異步方法;

使用同步invoke方法的程序代碼如下,已經(jīng)通過(guò)測(cè)試:

如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題

注 :使用異步BeginInvoke方法的過(guò)程和同步invoke方法一樣,把invoke方法換成BeginInvoke方法就可以;

方案三:使用同步上下文:SynchronizationContext方法,該方法是取得主線程的上下文信息,然后在子線程將訪問(wèn)UI控件方法推送到UI上下文的消息隊(duì)列里,使用POST或者Send;

如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題

方案四:在命名空間: System.ComponentModel 里有個(gè)BackgroundWorker類,它是在一個(gè)單獨(dú)的線程里執(zhí)行,下圖拷貝官網(wǎng)說(shuō)明:

如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題

代碼 如下,測(cè)試通過(guò) :

如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題

 問(wèn)題擴(kuò)展:

以上就是解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題的方法,詳細(xì)使用情況還需要大家自己親自動(dòng)手使用過(guò)才能領(lǐng)會(huì)。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章名稱:如何解決C#的WinForm跨線程訪問(wèn)控件問(wèn)題
分享路徑:http://muchs.cn/article48/pihjhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)