1. 程式人生 > >WPF不同線程之間的控件的訪問

WPF不同線程之間的控件的訪問

notes har false true ble form int() ive init

原文:WPF不同線程之間的控件的訪問

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();}));
         

WPF不同線程之間的控件的訪問