相关疑难解决方法(0)

C# - ThreadPool QueueUserWorkItem使用?

就在我现在使用以下代码添加排队的线程.我不喜欢它.而且我的同事也不会因为他们不太了解C#.我想要的只是将一个方法排队在一个新线程中执行.

private static void doStuff(string parameter)
{
    // does stuff
}

// call (a)
ThreadPool.QueueUserWorkItem(a => doStuff("hello world"));
// call (b)
ThreadPool.QueueUserWorkItem(delegate { doStuff("hello world"); });
Run Code Online (Sandbox Code Playgroud)

那么还有其他用途ThreadPool.QueueUserWorkItem吗?

最好的是另一个1-Line-Call.如果可能,使用Func<>Action<>.


编辑:得到(b)答案和评论,我已经更喜欢它了.

c# multithreading delegates threadpool

25
推荐指数
2
解决办法
6万
查看次数

Func <T> .BeginInvoke是否使用ThreadPool?

当您在C#中调用Func委托(或Action代理)上的BeginInvoke方法时,运行时是否使用ThreadPool或生成新线程?

我几乎可以肯定它会使用ThreadPool,因为这是合乎逻辑的事情,但如果有人能证实这一点,我会很感激.

谢谢,

.net c# multithreading delegates

20
推荐指数
1
解决办法
6219
查看次数

使我的COM程序集调用异步

我刚刚"获得"在我目前的工作中维护用C#编码的遗留库的特权.

这个dll:

  • 公开使用Uniface制作的大型遗留系统的方法,除了调用COM对象之外别无选择.
  • 用作此遗留系统与另一个系统API之间的链接.
  • 在某些情况下,使用WinForm作为其UI.

更直观,据我了解组件:

*[Big legacy system in Uniface]* == [COM] ==> [C# Library] == [托管API] ==> *[Big EDM Management System]*

问题是:这个C#库中的一个方法运行时间太长而且我"应该"使它异步!

我习惯了C#,但根本不习惯COM.我已经完成了并发编程,但是COM似乎增加了很多复杂性,到目前为止我所有的试验都结束了:

  • 崩溃时根本没有错误消息
  • 我的Dll只能部分工作(只显示部分UI,然后关闭),但仍然没有给我任何错误

我没有关于如何在COM DLL中处理线程的想法和资源,我将不胜感激任何提示或帮助.

到目前为止,代码的最大部分我已经改变,使我的方法异步:

// my public method called by the external system
public int ComparedSearch(string application, out string errMsg) {
  errMsg = "";
  try {
    Action<string> asyncOp = AsyncComparedSearch;
    asyncOp.BeginInvoke(application, null, null);
  } catch (ex) {
    // ...
  }
  return 0;
}

private int AsyncComparedSearch(string application) {
  // my actual method …
Run Code Online (Sandbox Code Playgroud)

c# com multithreading

10
推荐指数
1
解决办法
463
查看次数

标签 统计

c# ×3

multithreading ×3

delegates ×2

.net ×1

com ×1

threadpool ×1