我是靠谱客的博主 单纯啤酒,这篇文章主要介绍C# 总结QueueUserWorkItem传参几种方式案例详解,现在分享给大家,希望可以做个参考。

最近在学习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
2
[ComVisible(true)] public delegate void WaitCallback(object state);

 于是问题来了,该如何给QueueUserWorkItem传参呢?以下是我遇到的一些方式:

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

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

2,直接传方法名。

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

3,用delegate构造一个WaitCallback。

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

4,用含一个object类型的方法Connect构造一个WaitCallback。

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

5,WaitCallback类型的delegate。

复制代码
1
2
3
4
5
6
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表达式。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
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传参几种方式内容请搜索靠谱客以前的文章或继续浏览下面的相关文章希望大家以后多多支持靠谱客!

最后

以上就是单纯啤酒最近收集整理的关于C# 总结QueueUserWorkItem传参几种方式案例详解的全部内容,更多相关C#内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(124)

评论列表共有 0 条评论

立即
投稿
返回
顶部