zoukankan      html  css  js  c++  java
  • 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();}));
             
    
  • 相关阅读:
    算法浅谈——一文讲透三分算法
    机器学习基础——一文讲懂中文分词算法
    线性代数精华2——逆矩阵的推导过程
    LeetCode 2 Add Two Numbers——用链表模拟加法
    LeetCode 1 Two Sum——在数组上遍历出花样
    大数据基石——Hadoop与MapReduce
    Flexbox布局
    对象基础
    对象枚举属性
    我的第一篇博文
  • 原文地址:https://www.cnblogs.com/sshoub/p/2355501.html
Copyright © 2011-2022 走看看