c# - 从多个后台线程同步 wpf dispatcher.invoke

标签 c# wpf invoke dispatcher synchronize

如果从多个后台线程访问,是否需要同步对 Dispatcher.Invoke 的调用?

我知道 Dispatcher.BeginInvoke 会自动同步对 silverlight 应用程序的调用 (http://msdn.microsoft.com/en-us/library/z8chs7ft(v=vs.95).aspx)

对于 wpf 应用程序也是如此,还是我应该取消注释下面的锁定语句。

  public MainWindow()
    {
        InitializeComponent();

        Dispatcher.BeginInvoke(new Action(() =>
            {
                const int MAX_NR_THREADS = 1000;
                for (int i = 0; i < MAX_NR_THREADS; ++i)
                {
                    int j = i+1;
                    new Thread(()=>ThreadMethod(j)).Start();
                }
            }));
    }


    private void ThreadMethod(int threadId)
    {
        const int ONE_MILLION = 1000000;
        for (int i = 0; i < ONE_MILLION/threadId; ++i)
        {            

            //lock(lockObj)
            //{                   
                this.Dispatcher.Invoke(new Action(() =>
                    {
                        int sum = 0;
                        for (int j = 0; j < ONE_MILLION/10000; ++j)
                        {
                            sum += j;
                        }
                        int a = sum;
                        concurrentQueue.Enqueue(threadId*ONE_MILLION);                    
                    }));                    
            //}                
        }
    }

最佳答案

不需要同步这些调用。 Dispatcher.Invoke 已经有效地充当了您的调用队列,并且不需要同步。

关于c# - 从多个后台线程同步 wpf dispatcher.invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196819/

相关文章:

c# - 如何在 C# 中检索 URL 协议(protocol)请求

c# - 如果经过 3 秒,方法只能再次调用

C# 视频转换器库

c# - 当鼠标悬停在列标题上时滚动 ListView

.net - XAML 中是否有公认的缩进属性样式?

polymorphism - 在 D 中非多态调用实例方法?

c# - NavigationView 和其他设置按钮

wpf 使用 xaml 将键盘焦点设置在文本框上

Javascript 设置变量和对象以及正确的语法(调试控制台)

C# 无法从 'System.DateTime' 转换为 'object[]' methodinfo.invoke