这篇文章主要介绍了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<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传参几种方式内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!
本文标题为:C# 总结QueueUserWorkItem传参几种方式案例详解


基础教程推荐
- 实例详解C#实现http不同方法的请求 2022-12-26
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#中的Linq to JSON操作详解 2023-06-08
- Unity shader实现高斯模糊效果 2023-01-16
- C# 解析XML和反序列化的示例 2023-04-14