WPF不同线程之间的控件的访问
原文:
WPF不同线程之间的控件的访问
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
WPF不同线程之间的控件是不同访问的,为了能够访问其他线程之间的控件,需要用Dispatcher.Invoke执行一个新的活动即可。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。例如:
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();}));

更多精彩