我想在c#中使用参数化线程创建一个新线程。
rulehandler
是类
Thread applyPolicyThread = new Thread(
new ParameterizedThreadStart(rulehandler.ApplyPolicy));
applyPolicyThread.start(false);
给出错误,即应用策略的重载方法与委托system.threading.start
匹配答案 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()的目标来实现,并且从那个无参数方法,您可以使用参数调用您的实际方法。