跨執行緒訪問及修改控制項屬性的解決方案

2022-07-08 04:18:09 字數 795 閱讀 8163

方法一:取消跨執行緒操作檢查

當執行緒b在訪問執行緒a建立的控制項時,執行緒a會對控制項的執行緒鎖進行檢驗,當多個執行緒同時對控制項進行寫操作時,必然產生衝突,因此此時的程式會非常不穩定,經常突然就退出,debug顯示原因是跨執行緒操作控制項了。既然如此,那就讓執行緒a不去檢驗其他執行緒了,在form_load函式裡加一句:

system.windows.forms.control.checkforillegalcrossthreadcalls = false;就萬事大吉了。很顯然,這種方法不推薦使用。

方法二:使用**機制

原理:有乙個**d,他負責溝通主線程a和其他執行緒b,當是主線程操作控制項時,正常執行;當是其他執行緒b操作控制項時,通知**d,之後**d喚醒主線程a,告訴主線程a去更改控制項的一些屬性,顯然,這樣一來,就不存在跨執行緒操作了,所有的任務由**d來完成。示例**如下:

使用delegate定義乙個**delshow。在其他執行緒中訪問控制項textbox1時,直接呼叫showdata("其他執行緒");就可以了,showdata函式能自動區分是否是主線程。

delegate

void

delshow();

//**

//將對控制項的操作寫到乙個函式中

private

void

showdata(string para)

else

//非建立執行緒,用**進行操作

); }}//

其他執行緒使用,具體執行緒的建立自己去檢視相關書籍

showdata(

"其他執行緒");

跨域訪問及Nginx解決跨域訪問

同源策略 sameorigin policy 是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。同源策略是處於對使用者安全的考慮,如果非同源就會受到以下限制 但是事實是經常...

跨執行緒訪問控制項

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

跨執行緒訪問控制項

程序是作業系統分配資源的最小單位,程序之間隔離,作為資源的擁有者,在建立 cpu處理時切換以及撤銷的過程中花費時間較長,而執行緒是作業系統任務排程的最小單元,對於每個程序中由多個列表內容執行緒執行對應的方法體,完成後立即釋放,這樣作業系統對執行緒處理起來更加容易,實現了併發程式。using syst...