使用两个参数对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)
}
你们有什么解决方案吗?
您可以使用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 = ...
现在您真正安全了,因为字符串被复制并传递给线程,所以后续的修改不会影响线程的执行。