使用两个参数对sub进行线程处理

本文关键字:sub 处理 线程 参数 两个 | 更新日期: 2023-09-27 18:22:35

可能重复:
具有多个参数的线程

一个线程如何处理带有两个参数的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)

}

你们有什么解决方案吗?

使用两个参数对sub进行线程处理

您可以使用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 = ...

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