这篇文章主要介绍了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# List实现行转列的通用方案 2022-11-02
- C#类和结构详解 2023-05-30
- C# 调用WebService的方法 2023-03-09
- C# windows语音识别与朗读实例 2023-04-27
- 一个读写csv文件的C#类 2022-11-06
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- winform把Office转成PDF文件 2023-06-14
- C#控制台实现飞行棋小游戏 2023-04-22
- unity实现动态排行榜 2023-04-27
- ZooKeeper的安装及部署教程 2023-01-22