久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C#線程之間操作無(wú)效|不允許訪問(wèn)控件(c# 線程間操作無(wú)效: 從不是創(chuàng)建控件“”的線程訪問(wèn)它)

 根的情義 2016-02-13

解決方法
1.創(chuàng)建事件委托

c#不允許對(duì)跨線程的控件的訪問(wèn),,如需操作跨線程的操作需要通過(guò)委托(delegate),,即是函數(shù)指針來(lái)操作跨線程。說(shuō)明dgList控件不是該線程的控件,,需要使用委托操作,。比如:

delegate void SetListBoxCallback(string str); //定義委托(SetListBoxCallback名稱可以變化,自己定義) 
public void SetListBox(string str)
{
if (listBoxInfo.InvokeRequired) //控件是否跨線程,?如果是,,則執(zhí)行括號(hào)里代碼
{
SetListBoxCallback setListCallback = new SetListBoxCallback(SetListBox); //實(shí)例化委托對(duì)象
listBoxInfo.Invoke(setListCallback, str); //重新調(diào)用SetListBox函數(shù)(新創(chuàng)建的委托進(jìn)行相應(yīng)控件的操作
}
else //否則,即是本線程的控件,,控件直接操作
{
listBoxInfo.Items.Add(str);  //具體的控件操作,。eg:textBox1.Text =str;
}
}


在MSDN里面可以找到,關(guān)鍵字:線程安全
委托名可以自己定義,,
(如果你直接執(zhí)行,,那么就是從子線程調(diào)用主線程的方法執(zhí)行你的操作,這樣是不允許的,。
雖然沒(méi)人告訴我這是為什么,,但是我覺(jué)得(很多線程同時(shí)調(diào)用)那樣可能會(huì)導(dǎo)致死鎖的情況。
舉例說(shuō),,我是主線程,,電腦是子線程,我能夠控制子線程怎么操作,,可是你能讓電腦控制我嗎,?顯然不能,也不可能。
那為什么引用就可以呢,?引用是什么,?
引用就是方法的別名,如果你打過(guò)游戲,,可以理解這是方法的一個(gè)副本,。
每個(gè)線程創(chuàng)建一個(gè)我的副本,那么就可以執(zhí)行了,,不會(huì)出現(xiàn)爭(zhēng)搶,,死鎖的情況。)

一樓線程安全代碼的解釋是這樣的:
定義一個(gè)委托
創(chuàng)建一個(gè)方法      //在需要線程操作的地方調(diào)用此方法
{
如果某一個(gè)操作需調(diào)用主線程的該方法
給他創(chuàng)建一個(gè)該方法的副本,,調(diào)用該方法的副本執(zhí)行操作
如果并沒(méi)有調(diào)用主線程操作
直接執(zhí)行【你需要的操作】 //在此你需要的操作即在主線程上進(jìn)行的操作
}


2.創(chuàng)建線程(需要補(bǔ)全,,實(shí)操未通過(guò))

 void XXXXXX()

{

ThreadStart X;

X= new ThreadStart(func); //將類的方法綁定X。

Thread Y=new Thread(Y); //創(chuàng)建新線程

Y.Start();//線程開(kāi)始

}

void func(XXXXXXXXX)  //類的一個(gè)方法

{

//對(duì)相應(yīng)控件進(jìn)行操作

}

ThreadStart是一個(gè)delegate 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多