带有Func参数的void方法的C#ThreadStart

时间:2018-08-22 10:45:42

标签: c# multithreading


我正在尝试像这样启动新线程

public class MyClass1
{
    public void DoThings(Func<object,string,string,bool> handler)
    {
        //...doing some stuff
        object param1 = ...
        string param2 = ...
        string param3 = ...

        if (somecondition)
            handler(param1, param2, param3);
        //...do other stuff 
    }
}

public class MyClass2
{
    public bool DoParticularThing(object p1, string p2, string p3)
    {
        //..do stuff
    }

    public MyClass2()
    {
        var myclass1Instance = new MyClass1();
        Thread t = new Thread(new ThreadStart(myclass1Instance.DoThings(DoParticularThing))); //here comes my error
    }


}

不幸的是,我继续遇到“期望的方法名”错误。我浏览了很多帖子,但我不明白是什么问题。

1 个答案:

答案 0 :(得分:2)

发生这种情况是因为您正在使用需要委托类型的void函数创建ThreadStart,因此您应该简单地执行以下操作:

Thread t = new Thread(new ThreadStart(()=>myclass1Instance.DoThings(DoParticularThing)));

使用lambda语法, 还值得一提的是,Thread类已经很老了,您最好使用Tasks,它更好一些,并支持诸如取消标记和其他很多有趣的东西。 语法是:

Task<bool>.Run(()=>{
 //..do stuff,the logic of your DoParticularThing function
});