對 Windows 窗體控制項進行執行緒安全呼叫

2021-06-21 03:23:41 字數 947 閱讀 1351

在c#多執行緒程式設計或者使用委託非同步程式設計的時候,經常會遇到這樣的錯誤:

從不是建立某個控制項的執行緒的其他執行緒呼叫該控制項。例如:

private void settextunsafebtn_click(

object sender,

eventargs e)

// this method is executed on the worker thread and makes

// an unsafe call on the textbox control.

private void threadprocunsafe()

有的人可能找到的方法是加這一句checkforillegalcrossthreadcalls = false,設定為不檢查呼叫控制項的合理性,但這樣是不安全的。

正確的解決方法是

查詢控制項的 invokerequired 屬性。

如果 invokerequired 返回 true,則使用實際呼叫控制項的委託來呼叫 invoke。

如果 invokerequired 返回 false,則直接呼叫控制項。

private void settextsafebtn_click(

object sender,

eventargs e)

// this method is executed on the worker thread and makes

// a thread-safe call on the textbox control.

private void threadprocsafe()

其中settext函式為:

private void settext(string text));}

else

}

windows窗體控制項的學習

checkbox 的學習 屬性 checked 該值指示核取方塊是否處於選中狀態,text 與此控制項關聯的文字 name 獲取或設定控制項的名稱 事件 click 當滑鼠單擊控制項時發生 checkedchanged checked值發生變化 private void checkbox1 chec...

Windows 窗體控制項的布局

出處 對許多應用程式而言,需要首先考慮如何在窗體中精確放置控制項。system.windows.forms 命名空間提供了許多布局工具來完成此項操作。autosize 屬性概述 描述 autosize 屬性及其在布局中的角色。windows 窗體控制項中的邊距和填充 描述 margin 和 padd...

C 捕獲Windows窗體控制項

最近由於客戶的需求,需要乙個登陸的解決方案,但是我們需要捕獲介面的控制項,並賦值,然後自動登入,在網上找了一下,autoit這個工具不錯,可以捕獲的到窗體及控制項,但是沒有原始碼呀,自己動手寫乙個簡單版的吧。好了,下面咱們來說道說道 思路分析 我們首先要捕獲滑鼠的移動,當滑鼠按下時,觸發乙個事件,然...