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();}));
             
    
  • 相关阅读:
    《病理学》读书笔记
    《药理学》读书笔记
    《人格心理学》读书笔记
    《普通心理学》读书笔记
    UI进阶 跳转系统设置相关界面的方法
    安装cocoapods
    CocoaPods 添加第三方库报错
    Objective-c setObject:forKey:和setValue:forKey:的区别
    解析稍微复杂一点的数据
    获取当前屏幕显示的viewcontroller
  • 原文地址:https://www.cnblogs.com/sshoub/p/2355501.html
Copyright © 2011-2022 走看看