使用c#中的参数启动新线程

时间:2012-03-07 13:11:12

标签: c# multithreading

我想在c#中使用参数化线程创建一个新线程。

rulehandler是类

的对象
Thread applyPolicyThread = new Thread(
       new ParameterizedThreadStart(rulehandler.ApplyPolicy));
applyPolicyThread.start(false);

给出错误,即应用策略的重载方法与委托system.threading.start

匹配

5 个答案:

答案 0 :(得分:4)

参数化线程的参数类型必须始终为object(参见HERE):

public void ApplyPolicy(object param)
{
    bool value = (bool)param;
    //your code
}

答案 1 :(得分:2)

为什么不使用TPL:

Task.Factory.StartNew(() 
   => 
   {
      //This is executed in a separate thread
      ruleHandler.ApplyPolicy(false))
   });

这将在系统方便时启动新线程(不是立即,但不久之后) 它允许您传递强类型参数。

答案 2 :(得分:0)

这不是您使用ParameterizedThreadStart的方式。 您需要将方法作为参数传递,如下所示:

Thread applyPolicyThread = new Thread(
       new ParameterizedThreadStart(Start));
applyPolicyThread.start(false);

其中Start就是这样的方法

   static void Start(object info)
    {
    // This receives the value passed into the Thread.Start method.
    }

答案 3 :(得分:0)

不确定rulehandler.ApplyPolicy是什么,但你应该传递一个方法object作为单个参数(你可以把它放在里面):

void ApplyPolicy(object someState)
{
   bool boolState = (bool)someState;
   ...
}

答案 4 :(得分:0)

您可以通过创建一个无参数方法作为threadstart()的目标来实现,并且从那个无参数方法,您可以使用参数调用您的实际方法。