我在我的C#代码中使用多线程如下:

Thread startThread;public void NewThread()
{ThreadStart starter = delegate { foo(); };startThread = new Thread(starter);startThread.Start();
}private void foo()
{//do some work
}

然后在我的应用程序中,我调用NewThread()来运行新线程。

但是现在我在每个类上都有很多线程,并且每个类都有一个NewThread(),我想把它移动到一个静态的Util类,并在每次我希望在该函数上有一个新线程时将它传递给它。

你知道这是怎样做的最佳方法,如果是的话我怎样才能将函数名称作为参数传递给它?


#1楼

看看下面有关Codeproject“ 穷人的Parallel.ForEach Iterator ”的文章。 我认为这正是你在寻找的东西。 非常好用。

对于更强大的东西,还可以看一下Power Threading Library 。


#2楼

好吧,由于该方法是私有的,调用者知道方法名称是否有意义? 如果它是公开的,您可以传递方法:

public void NewThread(Action task)
{ThreadStart starter = delegate { task(); };startThread = new Thread(starter);startThread.Name = task.Method.Name;startSpoolerThread.Start();
}public void foo()
{//do some work
}NewThread(obj.foo);

但是,对于私有方法,我怀疑枚举/开关是最好的选择......

NewThread(TasktType.Foo);

或者,你可以通过反思获得方法......

public void NewThread(string name)
{MethodInfo method = GetType().GetMethod(name,BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,null, Type.EmptyTypes, null);ThreadStart starter = delegate { method.Invoke(this, null); };// etc (note: no point using Delegate.CreateDelegate for a 1-call usage

#3楼

我建议您考虑查看并行扩展任务API的CTP; 你没有提到为什么你需要一个主题,但他们已经自动化了大部分内容,这是他们博客的链接


#4楼

除非有明确创建线程的特定原因,否则为什么不使用Threadpool? Threadpool.QueueUserWorkItem方法将委托作为要执行的工作单元。 委托是一种特定类型,但您可以像在示例中一样将自己的委托调用包装在其中。 除非您需要精细控制或取消,否则通常最好使用线程池而不是自己旋转线程。


#5楼

或者,如果您正在使用Win.Forms或类似的基于GUI的应用程序,我建议使用BackgroundWorker 。 它负责为大多数与线程相关的事件进行编组,并且中止(如果这是你需要做的事情)也不那么复杂。


#6楼

代理已经提供了一种异步执行它们的方法。 例如:

delegate void dowork();
private static void WorkDone(IAsyncResult result)
{((dowork)result.AsyncState).EndInvoke(result);// this function is called when the delegate completes
}
public void Start()
{dowork dw = delegate {// code in this block has it's own thread };dw.BeginInvoke(WorkDone, null);
}

所以为了将函数指针传递给其他任何东西,你只需要创建一个具有正确签名的委托(在这种情况下我使用了匿名方法,但你可以使用任何具有正确签名的函数)并调用它的BeginInvoke方法,传递一个函数将在完成后被调用..该函数必须在原始委托上调用EndInvoke,并将其传递给result参数中的WorkDone函数。

C#中的多线程:如何将函数名称传递给另一个函数来启动新线程?相关推荐

  1. 指针||指针和数组||指针和函数||指针、数组、函数 案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序

    指针 指针的基本概念 指针的作用: 可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 可以利用指针变量保存地址 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名 ...

  2. React Native之函数作为参数传递给另外一个函数去调用

    1 用法 我们一般喜欢把js里面的函数作为参数传递给另外一个函数,然后再调用这个函数,有点像C语言里面的函数指针 2 代码测试 写了一个函数,2个参数分别是函数,然后更具数据决定调用哪个函数 /*** ...

  3. Go语言函数作为 值 赋值给一个变量 和 函数作为参数传入另一个函数的写法你不想了解咩

    1.在Go语言中,函数也是可以作为值赋值给另一个变量的,代码如下: package mainimport "fmt"func function1() {fmt.Println(&q ...

  4. 如何引用传递参数从一个函数中得到多个返回值

    2019独角兽企业重金招聘Python工程师标准>>> 通过"引用"传递参数的方法从一个函数中得到多个返回值.就像三元运算符一样,大部分受过正式编程训练的程序员都 ...

  5. c语言自定义函数名称怎么命名,C语言函数名称为什么可以任意更改?

    max并非是标准库函数,而是自定义函数 看你的程序 # include                             /*这是头文件,库函数是由头文件提供给我们                ...

  6. matlab函数代入求值,matlab中,如何把带有符号的式子代入到一个函数中去?

    答:再开一个函数文件 function f2=fun(m) f2=f1(3*m+1): 这样就行了啊 答:如果是单变量函数,做起来很简单,直接用inline就可以了: 如果是多变量函数,相对要麻烦一些 ...

  7. 【C语言函数3.2】写一个函数,实现一个整形有序数组的二分查找代码

    写一个函数,实现一个整形有序数组的二分查找代码 #include <stdio.h>int binary_search(int a[], int k, int s) {int left = ...

  8. python中自定义函数如何传递动态参数_python 函数的动态参数

    1. 函数的动态参数 1. *args 位置参数动态传参 2. **kwargs 关键字参数动态传参 顺序:位置参数, *args, 默认值, **kwargs def func(*args, **k ...

  9. 将函数当做参数 matlab,Matlab中如何将(自定义)函数作为参数传递给另一个函数...

    假如我们编写了一个积分通用程序,想使它更具有通用性,那么可以把被积函数也作为一个参数.在c/c++中,可以使用函数指针来实现上边的功能,在matlab中如何实现呢?使用函数句柄--这时类似于函数指针的 ...

最新文章

  1. Altium Designer原理图和PCB中对元件垂直、水平镜像翻转
  2. IO-BufferedInputStream
  3. [网络]------TCP UDP HTTP Socket 区别
  4. html-网页基本标签
  5. [软件工程学习笔记]浅谈敏捷开发
  6. 【Elastischearch】Elastischearch 的 ID 生成器 UUIDGenerator
  7. matlab画图点形状,matlab画图点的形状
  8. linux系统ping地址端口,linux ping 带端口
  9. sata接口 图解 定义_SATA数据和电源接口定义详解(多图).pdf
  10. Hive调优之 union all 效率低的问题解决
  11. 【计算机基础】HTTP 超文本传输协议
  12. python aic准则_在Python中手工计算Akaike信息标准(AIC)
  13. css3大绝技之animation动画
  14. 传说中开场晕过去一千多人的迈克杰克逊演唱会,有生之年请看下这个视频
  15. python地理处理包——Shapely介绍及用户手册
  16. paired-end reads的拼接
  17. Raptor 经典例题 2 (冒泡法排序 100名同学拉成一圈)
  18. 立创EDA的元件库导入AD
  19. 计算机视觉基础-图像处理-几何变换
  20. Google创新机器

热门文章

  1. CentOS minimal 版安装图形界面的步骤分享,中文语言包
  2. apache配置文件“注解内容”全翻译
  3. 2014届去哪儿校园招聘笔试题
  4. Lync 2013企业实战(三)
  5. 【ABAP系列】SAP ABAP中关于commit的一点解释
  6. 图片上传预览 (URL.createObjectURL)
  7. (转)UIPageControl使亮点直接跳到点击dot上
  8. android:图片裁剪
  9. 关于VSS上的项目源码管理的注意问题
  10. MySQL Python教程(1)