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();}));
             
    
  • 相关阅读:
    ubuntu下安装eclipse
    UTC时间、GMT时间、本地时间、Unix时间戳
    [转]mysql使用关键字作为列名的处理方式
    mysql日期格式化
    ssh远程登陆看不到用户名和主机名
    ssh以root用户远程登录失败
    PowerBI发布到网页
    视图是否有主键的问题
    select count(*)和select count(1)
    PPT产品的重要性
  • 原文地址:https://www.cnblogs.com/sshoub/p/2355501.html
Copyright © 2011-2022 走看看