欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

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

时间:2021-11-20 16:23:15|栏目:.NET代码|点击:

最近在学习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;
    }
  });
});

上一篇:使用 Salt + Hash 将密码加密后再存储进数据库

栏    目:.NET代码

下一篇:web打印 window.print()介绍

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

本文地址:http://www.codeinn.net/misctech/184229.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有