千家信息网

怎样给C# 中的QueueUserWorkItem传参

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,怎样给C# 中的QueueUserWorkItem传参,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。最近在学习citrix的xens
千家信息网最后更新 2025年01月31日怎样给C# 中的QueueUserWorkItem传参

怎样给C# 中的QueueUserWorkItem传参,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

最近在学习citrix的xenserver6.2的源代码,发现多处用到System.Threading命名空间下的ThreadPool.QueueUserWorkItem方法:

public static bool QueueUserWorkItem(WaitCallback callBack, object state);
publicstaticbool QueueUserWorkItem(WaitCallback callBack);

参数WaitCallback 本身是一个delegate,它在System.Threading命名空间中的定义如下:

[ComVisible(true)]public delegate void WaitCallback(object state);

那该如何给QueueUserWorkItem传参呢?以下是我遇到的一些方式:

1,直接传delegate。(不明白object 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构造一个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;    }  });});

关于怎样给C# 中的QueueUserWorkItem传参问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0