请选择 进入手机版 | 继续访问电脑版

[C#教程] C# 总结QueueUserWorkItem传参几种方式案例详解

[复制链接]
查看184 | 回复45 | 2021-9-14 11:45:55 | 显示全部楼层 |阅读模式

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

  1. public static bool QueueUserWorkItem(WaitCallback callBack, object state);
复制代码
  1. publicstaticbool QueueUserWorkItem(WaitCallback callBack);
复制代码

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

  1. [ComVisible(true)]
  2. public delegate void WaitCallback(object state);
复制代码

 于是标题 来了,该怎样 给QueueUserWorkItem传参呢?以下是我碰到 的一些方式:

1,直接传delegate。(不明确 object o去了那里 ?)

  1. ThreadPool.QueueUserWorkItem(delegate
  2. {
  3.   for (int i = 0; i < 20 && TargetNode.Nodes.Count == 0; i++)
  4.   {
  5.     Thread.Sleep(100);
  6.   }
  7.   MainWindowCommandInterface.Invoke(delegate { TargetNode.Expand(); });
  8. });
复制代码

2,直接传方法名。

  1. ThreadPool.QueueUserWorkItem(WaitForReboot, connection);
复制代码
  1. private void WaitForReboot(object o)
  2. {
  3. }
复制代码

3,用delegate构造一个WaitCallback。

  1. ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(Object o)
  2. {
  3.   ClientFillRectangle(0, 0, DesktopSize.Width, DesktopSize.Height, Color.Black);
  4. }), null);
复制代码

4,用含一个object范例 的方法Connect构造一个WaitCallback。

  1. ThreadPool.QueueUserWorkItem(new WaitCallback(Connect), new KeyValuePair<VNCGraphicsClient, Exception>(vncClient, null));
复制代码
  1. private void Connect(object o)
  2. {
  3. }
复制代码

5,WaitCallback范例 的delegate。

  1. ThreadPool.QueueUserWorkItem((WaitCallback)delegate(object o)
  2. {
  3.   // Sleep a short time before closing the splash
  4.   Thread.Sleep(500);
  5.   Program.Invoke(Program.MainWindow, Program.CloseSplash);
  6. });
复制代码

6,直接传Lambda表达式。

  1. ThreadPool.QueueUserWorkItem(o =>
  2. {
  3.   Program.Invoke(Program.MainWindow, () =>
  4.   {
  5.     PerformStorageSystemScan();
  6.     if (systemsAfter.Count > systemsBefore.Count)
  7.     {
  8.       // the new item should be selected
  9. .      comboBoxStorageSystem.SelectedItem = systemsAfter.Find(ss => !systemsBefore.Contains(ss));
  10.       comboBoxStorageSystem.DroppedDown = true;
  11.     }
  12.   });
  13. });
复制代码

到此这篇关于C# 总结QueueUserWorkItem传参几种方式案例详解的文章就先容 到这了,更多相干 C# 总结QueueUserWorkItem传参几种方式内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 123457080 | 2021-9-14 22:53:21 | 显示全部楼层
admin楼主最近很消极啊!
回复

使用道具 举报

avatar 123457647 | 2021-9-18 11:58:49 | 显示全部楼层
今天皮痒了?
回复

使用道具 举报

avatar 湿湿二 | 2021-9-22 01:00:09 | 显示全部楼层
我对admin楼主的敬仰犹如滔滔江水绵延不绝!
回复

使用道具 举报

avatar 福安到安顺屏 | 2021-9-23 00:26:13 | 显示全部楼层
求加金币!
回复

使用道具 举报

avatar 钟情695 | 2021-9-26 21:53:19 | 显示全部楼层
灌水不是我的目的!
回复

使用道具 举报

avatar 123457242 | 2021-10-3 05:41:40 | 显示全部楼层
楼上的这是啥态度呢?
回复

使用道具 举报

avatar 今生有你2017 | 2021-10-11 00:35:42 | 显示全部楼层
东方不败外加灭绝师太啊!
回复

使用道具 举报

avatar 大地歌女妥 | 2021-10-11 00:35:56 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,运动刷步数还是免费刷的,QQ和微信都可以刷,特别好用。访问地址:http://yd.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 胡37 | 2021-10-11 00:37:07 | 显示全部楼层
这个帖子会火的,鉴定完毕!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则