C# 使用两个参数执行子线程?

C# 使用两个参数执行子线程?,c#,multithreading,C#,Multithreading,可能重复: 一个线程如何处理具有两个参数的子线程 我想像这样线程化我的sub,但会出现错误: Thread t = new Thread (subname); t.Start() 以下是错误: 参数1:无法从“方法组”转换为 'System.Threading.ParameterizedThreadStart' 匹配的最佳重载方法 'System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart)' 有一些无效

可能重复:

一个线程如何处理具有两个参数的子线程

我想像这样线程化我的sub,但会出现错误:

Thread t = new Thread (subname);
t.Start()
以下是错误:

参数1:无法从“方法组”转换为 'System.Threading.ParameterizedThreadStart'

匹配的最佳重载方法 'System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart)' 有一些无效的参数

下面是我的潜艇的外观:

    public string send2(string kom, string ddm)
        {

///code for a httpwebrequest (too long to post all of it)


}
你们有什么解决办法吗?

你们可以用lambda:

...
string kom = ...
string ddm = ...

Thread t = new Thread( () => send2( kom, ddm ) );

有点晚了,但我想提醒您注意以下情况:

...
string kom = ...
string ddm = ...

Thread t = new Thread( () => send2( kom, ddm ) );

t.start();
// the strings get assigned different values
kom = ...
ddm = ...
这可能不是你的情况,但它可能发生,所以意识到这一点是个好主意

如果在
t
有机会启动之前,两个字符串被分配了不同的值,则方法
send2
将获得字符串的新值,而不是创建线程时的值

在这种情况下,最好将字符串复制到包装器对象中,并将字符串作为参数传递给线程:

Wrapper w = new Wrapper(); // contains two strings
w.String1 = String.Copy(kom);
w.String2 = String.Copy(ddm);

Thread t = new Thread( 
    o => 
    {
        Wrapper lw = (Wrapper)o;
        send2( lw.String1, lw.String2 ) );
    });

t.start(w);
// the strings get assigned different values
kom = ...
ddm = ...

现在您真正安全了,因为字符串已被复制并传递给线程,因此后续修改不会影响线程的执行。

您希望使用哪些参数值调用子线程?这是没有意义的。因此,如果在webrequest中声明或指定了字符串kom和ddm,我可以将它们设置为null吗?这样当线程启动时,它们就不会再为null了?正如我在回答中所解释的,如果在启动线程后立即修改字符串,我担心线程安全问题。