使用c#中的参数启动新线程
本文关键字:线程 新线程 启动 参数 使用 | 更新日期: 2023-09-27 18:27:06
我想使用c#中的参数化线程创建一个新线程。
rulehandler
是类的对象
Thread applyPolicyThread = new Thread(
new ParameterizedThreadStart(rulehandler.ApplyPolicy));
applyPolicyThread.start(false);
它给出了一个错误,即应用策略的重载方法与委托系统不匹配。threading.start
参数化线程的参数类型必须始终为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()的目标来实现这一点,并从该无参数方法中调用带有参数的实际方法。