返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# 总结QueueUserWorkItem传参几种方式案例详解
  • 415
分享到

C# 总结QueueUserWorkItem传参几种方式案例详解

2024-04-02 19:04:59 415人浏览 泡泡鱼
摘要

最近在学习citrix的xenserver6.2的源代码,发现多处用到System.Threading命名空间下的ThreadPool.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<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表达式。


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传参几种方式案例详解的文章就介绍到这了,更多相关C# 总结QueueUserWorkItem传参几种方式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C# 总结QueueUserWorkItem传参几种方式案例详解

本文链接: https://lsjlt.com/news/135329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作