您好,登錄后才能下訂單哦!
怎樣給C# 中的QueueUserWorkItem傳參,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
最近在學(xué)習(xí)citrix的xenserver6.2的源代碼,發(fā)現(xiàn)多處用到System.Threading命名空間下的ThreadPool.QueueUserWorkItem方法:
public static bool QueueUserWorkItem(WaitCallback callBack, object state);
publicstaticbool QueueUserWorkItem(WaitCallback callBack);
參數(shù)WaitCallback 本身是一個(gè)delegate,它在System.Threading命名空間中的定義如下:
[ComVisible(true)] public delegate void WaitCallback(object state);
那該如何給QueueUserWorkItem傳參呢?以下是我遇到的一些方式:
1,直接傳delegate。(不明白o(hù)bject o去了哪里?)
ThreadPool.QueueUserWorkItem(delegate { for (int i = 0; i < 20 && TargetNode.Nodes.Count == 0; i++) { Thread.Sleep(100); } MainWindowCommandInterface.Invoke(delegate { TargetNode.Expand(); }); });
2,直接傳方法名。
ThreadPool.QueueUserWorkItem(WaitForReboot, connection);
private void WaitForReboot(object o) { }
3,用delegate構(gòu)造一個(gè)WaitCallback。
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(Object o) { ClientFillRectangle(0, 0, DesktopSize.Width, DesktopSize.Height, Color.Black); }), null);
4,用含一個(gè)object類型的方法Connect構(gòu)造一個(gè)WaitCallback。
ThreadPool.QueueUserWorkItem(new WaitCallback(Connect), new KeyValuePair<VNCGraphicsClient, Exception>(vncClient, null));
private void Connect(object o) { }
5,WaitCallback類型的delegate。
ThreadPool.QueueUserWorkItem((WaitCallback)delegate(object o) { // Sleep a short time before closing the splash Thread.Sleep(500); Program.Invoke(Program.MainWindow, Program.CloseSplash); });
6,直接傳Lambda表達(dá)式。
ThreadPool.QueueUserWorkItem(o => { Program.Invoke(Program.MainWindow, () => { PerformStorageSystemScan(); if (systemsAfter.Count > systemsBefore.Count) { // the new item should be selected . comboBoxStorageSystem.SelectedItem = systemsAfter.Find(ss => !systemsBefore.Contains(ss)); comboBoxStorageSystem.DroppedDown = true; } }); });
關(guān)于怎樣給C# 中的QueueUserWorkItem傳參問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。