簡體   English   中英

從多個后台線程同步WPF dispatcher.invoke

[英]synchronize wpf dispatcher.invoke from multiple background threads

如果從多個后台線程訪問,我是否需要同步對Dispatcher.Invoke的調用?

我知道Dispatcher.BeginInvoke自動同步Silverlight應用程序的調用( http://msdn.microsoft.com/zh-cn/library/z8chs7ft(v=vs.95).aspx

對於wpf應用程序也是如此,還是我應該取消注釋下面的lock語句。

  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有效地充當了您的呼叫的隊列,並且不需要同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM