c#winform跨執行緒操作控制元件的一種方法,InvokeRequired
在winform裡面如果有建立新執行緒的話,線上程裡面直接操作控制元件或修改控制元件的屬性是不允許的,雖然有辦法讓程式執行時忽略跨執行緒可能產生的問題,從而解決;但是從科學的角度看,該辦法並不可取,所以我就用了InvokeRequired的辦法解決跨執行緒操作問題。
先上程式碼
if (this.InvokeRequired) { this.Invoke(new MethodInvoker(() => { //你想要操作的內容 //doing(); })); } else { //你想要操作的內容 //doing(); }
就這樣,如果操作的控制元件不是執行緒裡面生成的,就會進入到this.InvokeRequired裡面。這樣就可以解決衝突。
相關推薦
c#winform跨執行緒操作控制元件的一種方法,InvokeRequired
在winform裡面如果有建立新執行緒的話,線上程裡面直接操作控制元件或修改控制元件的屬性是不允許的,雖然有辦法讓程式執行時忽略跨執行緒可能產生的問題,從而解決;但是從科學的角度看,該辦法並不可取,所以我就用了InvokeRequired的辦法解決跨執行緒操作問題。
2017.10.20 C#跨執行緒操作控制元件的執行緒安全方法
C#跨執行緒操作控制元件的執行緒安全方法 在C#中,經常用到這樣一個場景,Windows Form程式啟動一個工作者執行緒執行一部分工作,這樣做是為了避免速度慢的工作如果直接呼叫會使得主Form停止響應一段時間。 既然啟動了執行緒,就避免不了執行緒之間資料傳遞的事情,相信你有很多種辦法
winform跨執行緒操作webBrowser控制元件
一、解決問題 在winform上呼叫百度地圖,使用了webBrowser控制元件。當不跨執行緒時,使用正常。使用子執行緒操作webBrowser控制元件時出現了一下錯誤。 子執行緒中對窗體上的控制元件操作是會出現異常,這是由於子執行
C#執行緒間操作無效(跨執行緒訪問控制元件)
很多朋友在剛接觸Winfrom的時候會遇到這個問題:執行緒間操作無效,從不是建立控制元件textbox1的執行緒訪問它。 這裡有提供兩種解決方法。 第一種 System.Windows.Form
C# 跨執行緒訪問控制元件
因為C#安全機制的問題,不是本執行緒建立的控制元件,是不能直接訪問的。以下提供了兩種解決辦法:一、讓程式不檢查跨執行緒呼叫,加入一行程式碼就可以了,但這樣背離了C#安全機制的初衷;二、建立委託,利用C#的Invoke方法來執行跨執行緒呼叫。using System; usin
C#跨執行緒獲取控制元件的引數
線上程ThreadTask1中需要跨執行緒訪問Form上ComboBoxSerialPort控制元件的Text屬性: 1. 傳統方法 定義一個可返回object的委託(系統庫中沒找到這樣的委託,只好自己寫一個): delegate object obj_delegate(
Winform控制元件多執行緒操作控制元件的解決方案
1)在要訪問的控制元件的那個窗體,定義公共屬於或公共方法,這樣可以實現間接的訪問 2)在主窗體,定義方法來包裝上面定義的另外一個窗體的方法,然後定義委託。 3)如果當執行緒,直接委託實現就可以,如果多執行緒,用invoke技術 在多執行緒程式設計中,我們經常要在工作執行緒中去
跨執行緒訪問控制元件拋異常的解決方法
方法1:關閉跨執行緒操作的檢查,在建構函式裡面新增:System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;,但是此方法不推薦使用。 方法2:(推薦使用此方法)在訪問的地方找回建立控制元件的執
非同步委託跨執行緒訪問控制元件解決介面卡死
下面來看第二種方案,就是使用delegate和invoke來從其他執行緒中控制控制元件資訊。網上有很多人寫了這種控制方式,然而我看了很多這種帖子,表明上看來是沒有什麼問題的,但是實際上並沒有解決這個問題,首先來看網路上的那種不完善的方式: public partial cl
C#(Winform) 跨執行緒訪問解決辦法
網上的資料很多,這裡直接摘抄。 1、關閉跨執行緒檢查。 CheckForIllegalCrossThreadCalls = false; 2、通過委託的方式,在控制元件的執行緒上執行。 using System;using System.Thread
Jmeter系列(45)- 詳解 Jmeter 跨執行緒組取引數值的方法,免程式碼!
如果你想從頭學習Jmeter,可以看看這個系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 用過 Jmeter 的同學應該都知道,Jmeter 不支援跨執行緒傳遞引數 哎,那我想跨執行緒傳遞引數,要咋整呢?別急,接下來
多執行緒程式設計(二)——面試題,每個執行緒只打印一種字元,多個執行緒協同順序列印n次字串(求大神的其他實現方案)
(這個是歡聚時刻(YY)的筆試題,在筆試的時候沒有寫出來,後來自己寫了出來,希望大神能給出更優秀的解決方案……ps:現在面試官總有面試時問筆試程式設計題思路的習慣,呵呵) 題目簡述: 輸入一個字串以
C#(Winform) 當前執行緒不在單執行緒單元中,因此無法例項化 ActiveX 控制元件
解決方案: 1、在主執行緒中例項化此ActiveX控制元件 2、將建立此Active控制元件的執行緒設定為單執行緒。 Thread.ApartmentState 獲取或設定此執行緒的單元狀態。 newThread= new Thre
C# 定時關窗 & 跨執行緒操作視窗
新增定時器 直接在程式碼中new一個定時器並繫結回撥函式即可 跨執行緒關閉其他視窗 會報異常: 解決方法: 在你要操作的視窗的類的建構函式中指明允許跨執行緒操作。 public partia
C# 跨執行緒操作UI(介面)
C# winform程式裡經常會用到多執行緒,如果線上程的邏輯處理裡面有需要重新整理UI的,就需要交給委託來處理。 如下: 定義委託 private delegate void Sho
C# WinForm美化重繪listbox控制元件
繼承C#中的Listbox控制元件,重新美化了一下。美化樣式很多,以下只是其中一種。 包括 為Item增加動態效果;重寫了一個垂直滾動條控制元件。 ps:寫垂直滾動條控制元件前,看了一些網上的c#程式碼,可讀性太差,問題也多。所以從零寫了一個,設計思路是把一個滾動條分解
C#Winform超連結標籤(linkLabel)控制元件
linkLabel控制元件是一個超連結控制元件,用來展示超連結以及控制對單擊超連結後進行一些操作: 常用屬性: LinkColor:連結顏色屬性,控制標籤的連結部分的顏色。 LinkVisited:控制該超連結標籤是否被點選過(注意:並不是程式執行期間不寫任何程式碼點選該標籤後LinkVis
C# winform刪除執行緒和退出程式方法
退出C# WinForm程式有很多方法,如: this.Close(); Application.Exit(); Application.ExitThread(); System.Environment.Exit(0); 區別在於: 1.this.C
C# WINFORM 子執行緒更新UI
獲取當前執行緒 System.Threading.Thread.CurrentThread.ManagedThreadId //判斷是否建立控制代碼 if (this.IsHandleCreated) {
WebBrowser 跨執行緒操作中的一些問題
WebBrowser 必須是單執行緒的, 如果我在另一個執行緒呼叫invoke, 那麼這個invoke將返回錯誤.妥協的辦法是通過傳送訊息(SendMessage)來變相實現跨執行緒控制. 但是其中有一個問題,必須要解決, 因為跨執行緒,所以計數問題必須