C# 使用c中的参数启动新线程#
我想使用c#中的参数化线程创建一个新线程C# 使用c中的参数启动新线程#,c#,multithreading,C#,Multithreading,我想使用c#中的参数化线程创建一个新线程 rulehandler是类的对象 Thread applyPolicyThread = new Thread( new ParameterizedThreadStart(rulehandler.ApplyPolicy)); applyPolicyThread.start(false); 应用策略的重载方法与委托system.threading.start不匹配,这是一个错误。为什么不使用TPL: Task.Factory.StartNew
rulehandler
是类的对象
Thread applyPolicyThread = new Thread(
new ParameterizedThreadStart(rulehandler.ApplyPolicy));
applyPolicyThread.start(false);
应用策略的重载方法与委托system.threading.start不匹配,这是一个错误。为什么不使用TPL:
Task.Factory.StartNew(()
=>
{
//This is executed in a separate thread
ruleHandler.ApplyPolicy(false))
});
这将在系统方便时启动一个新线程(不是立即启动,而是很快启动)。它允许您传递强类型参数 为什么不使用第三方物流:
Task.Factory.StartNew(()
=>
{
//This is executed in a separate thread
ruleHandler.ApplyPolicy(false))
});
这将在系统方便时启动一个新线程(不是立即启动,而是很快启动)。它允许您传递强类型参数 参数化线程的参数类型必须始终为
object
(请参阅):
参数化线程的参数类型必须始终为
object
(请参阅):
这不是使用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.
}
这不是使用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.
}
不确定
rulehandler.ApplyPolicy
是什么,但您应该传递一个以object
作为单个参数的方法(您可以将其强制转换为内部参数):
不确定
rulehandler.ApplyPolicy
是什么,但您应该传递一个以object
作为单个参数的方法(您可以将其强制转换为内部参数):
您可以通过创建一个无参数方法作为threadstart()的目标来执行此操作,并且可以从该无参数方法调用带有参数的实际方法。您可以通过创建一个无参数方法作为threadstart()的目标来执行此操作通过这个无参数方法,您可以使用参数调用实际方法。您可以显示
rulehandler.ApplyPolicy
的签名吗?根据我能从发布的代码中推断出的一点,它应该看起来像void ApplyPolicy(object p)
。public void ApplyPolicy(bool isNewPolicy)您能显示rulehandler.ApplyPolicy的签名吗?根据我能从发布的代码中推断出的一点,它应该是void ApplyPolicy(object p)
。public void ApplyPolicy(bool isNewPolicy)是的,它是。我会详细说明的。请稍微定义一下Task.Factory.StartNew()是的,是的。我会详细说明的。请定义一下Task.Factory.StartNew()对不起,我不明白你说的是ApplyPolicy本身。你说得对,所以+1;)如果可以的话,现在有点“老派”。除非你需要线程同步启动(当然是异步执行)。@Baboon:是的,我同意大多数情况,但这是问题的答案,为什么会有异常。IMO线程应该用于在后台“始终”运行的任务(如服务器的TcpListner),而任务
应该用于“简短”的后台任务(我认为在本例中是这样的)…事实上,它确实回答了他的问题;)但是,任务可以用于长时间运行的异步操作,然后应指定TaskCreationOptions.longlunning
。对于短期操作,不建议使用BackgroundWorker
吗?对不起,我不明白您所说的是ApplyPolicy本身。你说得对,所以+1;)如果可以的话,现在有点“老派”。除非你需要线程同步启动(当然是异步执行)。@Baboon:是的,我同意大多数情况,但这是问题的答案,为什么会有异常。IMO线程应该用于在后台“始终”运行的任务(如服务器的TcpListner),而任务
应该用于“简短”的后台任务(我认为在本例中是这样的)…事实上,它确实回答了他的问题;)但是,任务可以用于长时间运行的异步操作,然后应指定TaskCreationOptions.longlunning
。对于短期操作,不建议使用BackgroundWorker
?