相关疑难解决方法(0)

从多个工作线程更新UI(.NET)

我有一个我正在研究的宠物项目,它有多个工作线程.将所有内容输出到控制台变得越来越难以遵循,因此我想开发一个每个线程有一个输出区域的UI.我想知道线程向UI发送更新的最佳方式.我有两个想法:

1)让每个线程在新数据可用时设置"DataUpdated"标志,并让UI定期检查新数据.

2)创建每个线程,并在新数据可用时调用UI Update(...)方法.

我目前倾向于(2)有两个原因:我不喜欢"检查"每个线程的想法,因为这是我的第一个多线程应用程序,(2)似乎比它可能更简单.我想知道:

  • 在简单性和效率方面哪个选项更可取?
  • 你有任何实施(2)或类似的东西(即更多事件驱动)的提示吗?

.net c# user-interface multithreading

6
推荐指数
1
解决办法
1万
查看次数

哪个C#程序集包含Invoke?

替代问题:为什么VS10如此热衷于抱怨Invoke?

在我不断追求让我的应用程序成为世界上最好的C#程序员的过程中,我认为线程是一件好事.

MSDN有一篇关于对控件进行线程安全调用的有用文章,但它(以及看似关于该主题的所有其他文章)倾斜地引用了一个名为Invoke的方法.有时甚至是BeginInvoke,我读过的也是首选.

如果我能让visual studio识别Invoke,那么这一切都会很棒.MSDN说它包含在System.Windows.Forms程序集中,但我已经"使用"它了.可以肯定的是,我也尝试过使用System.Threading,但无济于事.

我需要通过哪些环节才能调用工作?

c# multithreading invoke visual-studio-2010

5
推荐指数
1
解决办法
1671
查看次数

C#Thread问题

我发生的是从上一次按钮点击动态创建的列表视图.然后ti启动一个后台工作程序,其中应该清除listview并每30秒用新信息填充iistview.
我不断得到:跨线程操作无效:控制'listView2'从一个线程访问,而不是创建它的线程.

  private void watcherprocess1Updatelist()
    {
        listView2.Items.Clear();
        string betaFilePath1 = @"C:\Alpha\watch1\watch1config.txt";
        using (FileStream fs = new FileStream(betaFilePath1, FileMode.Open))
        using (StreamReader rdr = new StreamReader((fs)))
        {
            while (!rdr.EndOfStream)
            {
                string[] betaFileLine = rdr.ReadLine().Split(',');
                using (WebClient webClient = new WebClient())
                {
                    string urlstatelevel = betaFileLine[0];
                    string html = webClient.DownloadString(urlstatelevel);
                    File.AppendAllText(@"C:\Alpha\watch1\specificconfig.txt", html);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

c#

3
推荐指数
1
解决办法
504
查看次数