C 多執行緒窗體控制項安全訪問

2021-05-11 12:39:05 字數 928 閱讀 2166

c# 2.0 為了執行緒安全,不充許子執行緒直接訪問窗體中的控制項

如果在子執行緒中直接訪問說窗體控制項,編譯器會提示,控制項不是

由該執行緒建立的.

那麼在子執行緒中如何訪問窗體中的控制項呢?

在窗體的建構函式中加入這一句

control.checkforillegalcrossthreadcalls = false;

子執行緒就可以直接訪問窗體中的控制項了,不過這樣執行緒是非安全的.

而預設control.checkforillegalcrossthreadcalls=true;(捕獲執行緒錯誤呼叫)

這時可以用invoke

如下:

using

system;

using

system.collections.generic;

using

system.componentmodel;

using

system.data;

using

system.drawing;

using

system.text;

using

system.windows.forms;

using

system.threading;

namespace

project2

public

form1()

private

void

button1_click(

object

sender, eventargs e)

private

void

x1()

//執行緒安全的訪問窗體控制項

else }

}}}

c 執行緒中訪問主窗體控制項

最近做演算法的移植和demo展示,算是把大學裡的c c 又給複習了一遍。c 的窗體程式中,在子執行緒中訪問主線程的控制項,直接訪問會引發異常,提示不在同乙個程序裡之類的錯誤。所以,在timer控制項的定時事件或者在新執行緒裡控制進度條這種任務都會涉及到子執行緒訪問主線程裡的控制項問題。解決方案很簡單...

初試C 多執行緒 跨執行緒訪問控制項

c 裡建立執行緒的方式是 thread t new thread new threadstart this.dosomething t.start 裡面的dosomething是主線程裡的乙個函式,在裡面做自己需要的操作。那我就建了乙個winform程式來試一下,畫了乙個button1,乙個text...

C 中的跨執行緒訪問窗體控制項

原 程式 private void button1 click object sender,eventargs e private void dopay object sender,elapsedeventargs e 執行時會報無法跨執行緒訪問 messageout 控制項 修改方法 程式 pri...