daixinet

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    WPF不同线程之间的控件是不同访问的,为了能够访问其他线程之间的控件,需要用Dispatcher.Invoke执行一个新的活动即可。

例如:

        public void SetNotes(string notes)
        {
            if (Dispatcher.Thread != Thread.CurrentThread)
            {
                this.txtNote.Dispatcher.Invoke(new Action(() =>
                {
                    this.txtNote.Text += notes;
                    this.txtNote.Text += "\r";
                    this.txtNote.ScrollToEnd();
                }));
            }
            else
            {
                this.txtNote.Text += notes;
                this.txtNote.Text += "\r";
                this.txtNote.ScrollToEnd();
            }
        }

 WinForm中:

private delegate void delegateCrossThread(string message);
        private void SetStatus(string message)
        {
            if (this.m_StatusLabel.InvokeRequired == true)
            {
                delegateCrossThread ct = new delegateCrossThread(SetStatus);
                this.Invoke(ct, new object[] { message });
            }
            else
            {
                this.m_StatusLabel.Text = message;
                this.m_StatusLabel.Refresh();
            }
        }

3、异步打开窗口

            Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
            newWindowThread.SetApartmentState(ApartmentState.STA);
            newWindowThread.Start(); 

  private void ThreadStartingPoint()
        {
            SurveyStatWindow surveyStatDialog = new SurveyStatWindow();
            if (m_StatDataTable != null)
            {
                surveyStatDialog.TimeData = m_StatDataTable;
                surveyStatDialog.Init();
            }
            surveyStatDialog.ShowDialog();
        }

 4、全局异步调用

            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                AddText();
            }));

            this.Dispatcher.Invoke(new Action(() =>
            {
                AddText();
            }));

       Application.Current.Dispatcher.Invoke(new Action(delegate { AddText();}));
         

 

 

posted on 2012-02-17 11:28  daixinet.com  阅读(4999)  评论(0编辑  收藏  举报