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

本文关键字:线程 新线程 启动 参数 使用 | 更新日期: 2023-09-27 18:27:06

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

rulehandler是类的对象

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

它给出了一个错误,即应用策略的重载方法与委托系统不匹配。threading.start

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

参数化线程的参数类型必须始终为object(请参阅此处):

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

为什么不使用TPL:

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

这将在系统方便的时候启动一个新线程(不是立即启动,而是很快启动)
它允许您传递强类型参数。

这不是使用ParameterizedThreadStart的方式。您需要像这样传递一个方法作为参数:

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

Where Start是一种类似的方法

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

不确定rulehandler.ApplyPolicy是什么,但您应该传递一个以object为单个参数的方法(您可以在内部强制转换它):

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

您可以通过创建一个无参数方法作为threadstart()的目标来实现这一点,并从该无参数方法中调用带有参数的实际方法。