用两个参数线程化一个sub?

时间:2012-02-04 17:00:36

标签: c# multithreading

  

可能重复:
  thread with multiple parameters

如何使用两个参数来线程化一个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)


}

你们有什么解决方案吗?

2 个答案:

答案 0 :(得分:5)

您可以使用lambda:

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

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

答案 1 :(得分:1)

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

...
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 = ...

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