How to pass parameters to QueueUserWorkItem in C#
How to pass parameters to QueueUserWorkItem in C#, in view of this problem, this article introduces the corresponding analysis and solution in detail, hoping to help more partners who want to solve this problem to find a more simple and feasible method.
Recently, after learning the source code of citrix's xenserver6.2, I found that the ThreadPool.QueueUserWorkItem method under the System.Threading namespace is used in many places:
Publicstaticbool QueueUserWorkItem (WaitCallback callBack, object state); publicstaticbool QueueUserWorkItem (WaitCallback callBack)
The parameter WaitCallback itself is a delegate, which is defined in the System.Threading namespace as follows:
[ComVisible (true)] public delegate void WaitCallback (object state)
So how to pass parameters to QueueUserWorkItem? Here are some of the ways I came across:
1. Send it directly to delegate. I don't understand where object o went. )
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构造一个WaitCallback。 ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(Object o){ ClientFillRectangle(0, 0, DesktopSize.Width, DesktopSize.Height, Color.Black);}), null); 4,用含一个object类型的方法Connect构造一个WaitCallback。 ThreadPool.QueueUserWorkItem(new WaitCallback(Connect), new KeyValuePair(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表达式。 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;});}) This is the answer to the question about how to send parameters to QueueUserWorkItem in C#. I hope the above content can be of some help to you. If you still have a lot of doubts to be solved, you can follow the industry information channel to learn more about it.