.net compact框架中使用委托的多线程参数问题
我的问题是我有一个字符串列表,我想为一个字符串创建一个线程,将字符串传递到线程中。这是我的代码:.net compact框架中使用委托的多线程参数问题,.net,multithreading,compact-framework,.net,Multithreading,Compact Framework,我的问题是我有一个字符串列表,我想为一个字符串创建一个线程,将字符串传递到线程中。这是我的代码: public void getImageSource(List<string> UrlLinks) foreach (string urlLink in UrlLinks) { ThreadStart myThread = delegate { Fetch(urlLink); };
public void getImageSource(List<string> UrlLinks)
foreach (string urlLink in UrlLinks)
{
ThreadStart myThread = delegate { Fetch(urlLink); };
Thread t = new Thread(myThread);
t.Priority = ThreadPriority.Lowest;
t.IsBackground = true;
t.Start();
}
public void Fetch(string Link)
{
MessageBox.Show(Link);
}
public void getImageSource(列出URL链接)
foreach(URL链接中的字符串URL链接)
{
ThreadStart myThread=委托{Fetch(urlink);};
螺纹t=新螺纹(myThread);
t、 优先级=线程优先级。最低;
t、 IsBackground=true;
t、 Start();
}
公共无效获取(字符串链接)
{
MessageBox.Show(Link);
}
但是所有我的messagebox都返回相同的结果,这是列表中的第一个元素。我怎样才能修好它?提前感谢。您遇到了捕获的变量问题。。。您捕获的是
urlink
变量,而不是创建委托时的值。解决方法是在循环内创建一个临时变量:
public void getImageSource(List<string> UrlLinks)
{
foreach (string urlLink in UrlLinks)
{
string urlCopy = urlLink;
ThreadStart myThread = delegate { Fetch(urlCopy); };
Thread t = new Thread(myThread);
t.Priority = ThreadPriority.Lowest;
t.IsBackground = true;
t.Start();
}
}
public void getImageSource(列出URL链接)
{
foreach(URL链接中的字符串URL链接)
{
字符串urlCopy=urlink;
ThreadStart myThread=委托{Fetch(urlCopy);};
螺纹t=新螺纹(myThread);
t、 优先级=线程优先级。最低;
t、 IsBackground=true;
t、 Start();
}
}
不过,我不希望第一个URL被多次抓取——更可能的情况是最后一个URL被抓取(或者多种URL)
有关更多信息,请参阅本主题。感谢您的快速回复。我对学员仍有点困惑,正在阅读您的文档。祝您今天过得愉快。附言:你能解释一下吗:“虽然我不希望第一个URL被多次获取,但更可能的是最后一个URL会被获取(或者多种URL)”。@Thyphuong:
Fetch
将在实际调用委托时使用变量的任何值来调用。这很可能是在创建所有线程之后,即循环完成时——在这种情况下,该值将是最后遇到的值。但这是非常不确定的;例如,在“0,1,2,3,4”的列表中,你可以得到“0,1,3,4,4”。@Jon:你说得太对了。我重新检查了代码,发现返回的所有结果都是列表中的最后一个元素。再次感谢您提供的信息