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