首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiThreading形式的WinApp形式的时延C#

MultiThreading形式的WinApp形式的时延C#
EN

Stack Overflow用户
提问于 2011-11-23 20:41:29
回答 1查看 376关注 0票数 0

我对C#中的代码有一个问题:

代码语言:javascript
复制
main class {
var trick = new Object();
}
.......
public void AddTabWithCheck(List<Urls> url)
{

//Some Code 

foreach(Urls link in url){
     var thread = new System.Threading.Thread(p =>
        {
            lock (trick)
            {
                Action action = () =>
                {
                    addTab(link);
                };
                this.Invoke(action);
                if(link.Host == "google")
                    System.Threading.Thread.Sleep(5000);
            }
        });
        thread.Start(); }
}

我有问题,做一个时间延迟的winapp形式。

我不能使用线程睡眠,而(WithDatetime)或类似的WinAPP中有一个WebControl浏览器,我希望在循环中添加一些页面,在没有冻结UI的情况下增加一些延迟时间。两种计时器都不是很好的解决方案,因为我的情况很难处理。

因此,一个用户建议我使用这个解决方案(使用线程的解决方案)。我认为它没有问题,但直到现在我才意识到,如果我把我的循环,它只使用最后一个元素(循环),并创建X线程,所有使用相同的元素。

想得到更好的解释:我有这个List<Urls> url ;

有了这个班

代码语言:javascript
复制
public class Urls {
            public string Host { get; set; }
            public String url { get; set; }
}

现在我不明白为什么如果我在一个简单的Foreach中添加该代码,当线程启动时都使用循环的最后一个元素。

我已经检查了列表是否正确,添加了一个MessageBox以在线程代码之前显示当前对象,并且它会发生适当的变化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-23 20:45:00

所有匿名方法都共享同一个link变量。

您需要在循环中声明一个单独的变量,以便每个方法都获得自己的变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8248772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档