1. 程式人生 > >WPF多執行緒直接訪問介面的控制元件的解決方式

WPF多執行緒直接訪問介面的控制元件的解決方式

WPFDispatcher.Invoke方法,只有在其上建立 Dispatcher的執行緒才可以直接訪問DispatcherObject。若要從不同於在其上建立 DispatcherObject的執行緒的某個執行緒訪問 DispatcherObject,請對與 DispatcherObject關聯的 Dispatcher呼叫 Invoke BeginInvoke。需要強制執行緒安全的 DispatcherObject的子類可以通過對所有公共方法呼叫 VerifyAccess來強制執行緒安全。這樣可以保證呼叫執行緒是在其上建立 DispatcherObject的執行緒。

程式碼:

this.lbl.Dispatcher.Invoke(new Action(()=>{ this.lbl.Text = "this is a test!!!"; }));

this.lbl.Dispatcher.Invoke(new Action(()=>{ this.lbl.Text = "this is a test!!!"; }));

WinfromControl.Invoke方法 (Delegate),在擁有此控制元件的基礎視窗控制代碼的執行緒上執行指定的委託。

程式碼:

this.lbl.Invoke(new Action(()=>{ this.lbl.Text = "this is a test!!!"; }));

相關推薦

WPF執行直接訪問介面控制元件解決方式

WPF:Dispatcher.Invoke方法,只有在其上建立 Dispatcher的執行緒才可以直接訪問DispatcherObject。若要從不同於在其上建立 DispatcherObject的執行緒的某個執行緒訪問 DispatcherObject,請對與 DispatcherObject關聯的

C#執行訪問winform控制元件

方法一:System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;  不推薦使用這種方式,禁止編譯器對跨執行緒訪問做檢查的方式實現。 方法二:使用delegate和invoke private

執行直接更新UI控制元件彙總

成文表分享交流之意,惶恐水平有限,文中理解和表述有錯誤之處還請大家多被批評指正。 更新記錄: 2018年2月3日,根據網友評論提示更新錯別字,BegainInvoke=》BeginInvoke。 正文 1. 通過UI執行緒的SynchronizationCon

C# 執行中更新介面控制元件

在我們開發軟體時經常會需要跟新介面上的某個控制元件來顯示相關的資訊。 當我們的介面需要在程式執行中不斷更新資料時,當一個textbox的資料需要變化時,為了讓程式執行中不出現介面卡死的現像,最好的方法就是多執行緒來解決一個主執行緒來建立介面,使用一個子執行緒來執行程式並更新

C# 執行中更新窗體控制元件

在C#中用到多執行緒處理一些功能,同時希望介面同步顯示更新,如果直接寫程式碼就會出現一些問題: 問題程式碼: Thread ScanFileThread; ScanFileThread = new Thread(WorkScanFileThread);  this.Scan

工作執行操作主介面控制元件引起死鎖及解決

問題描述: 在監控程式中,設計一監控迴圈。 標頭檔案 .h HANDLE                                          m_hEventExit; CWinThread*                              

C# 執行與跨執行訪問介面控制元件

在編寫WinForm訪問WebService時,常會遇到因為網路延遲造成介面卡死的現象。啟用新執行緒去訪問WebService是一個可行的方法。 典型的,有下面的啟動新執行緒示例: private void LoadRemoteAppVersion()

WPF執行更改UI控制元件問題

無論是在WINFORM中,還是在WPF中,在涉及到複雜的邏輯關係時,如果在非同步執行緒中需要更改介面控制元件,需要通過以下機制進行操作,從而達到非同步更改介面控制元件的目的。 即   Dispatcher.Invoke(new Action(() =>   &nbs

跨平臺的執行互斥訪問控制(Mutex和Critical_Section)

<1>首先解決跨平臺   現在比較常用的平臺式Linux平臺和windows平臺,所以我們應該針對不同的平臺引用不同的標頭檔案 //平臺相關定義 #ifdef __linux #define OS_LINUX #endif #if defined(_WIN32)

C#執行非同步訪問winform中控制元件

我們在做winform應用的時候,大部分情況下都會碰到使用多執行緒控制介面上控制元件資訊的問題。然而我們並不能用傳統方法來做這個問題,下面我將詳細的介紹。       首先來看傳統方法:      public partial class Form1 : Form    

C# Winform專案中執行環境下, 如何跨執行對Window窗體控制元件進行安全訪問

請嘗試執行這段程式碼, 結果你會發現微軟開發工具會提示, Tb_Text.Text = int_Index.ToString(); 涉及"對Windows窗體控制元件進行執行緒安全呼叫", 並給瞭如下的解決方案:https://msdn.microsoft.com/zh-cn/library/ms171728

Java併發程式設計(03):執行併發訪問,同步控制

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent) # 一、併發問題 多執行緒學習的時候,要面

.net 委託執行 實時更新介面

    Thread thread = new Thread(() => {  button2.Invoke(new EventHandler(delegate { button2.Enabled = true; }));   this.Invoke(n

Java高併發——執行協作,同步控制

      繼上一篇:Java高併發——多執行緒基礎 中講到,共享資源的合理使用,才能夠使多執行緒程式有條不紊的執行。其中我們通過synchronized來實現臨界區資源的是否可以訪問。而,這篇我們來重點總結synchronized的增強替代版鎖,以及其它JD

執行實現Runnable介面

package com.lxxu.testthread; class MyThread2 implements Runnable{//執行緒的主體類 private String title; public MyThread2(String title){ this.title = tit

MFC執行計算圓周率介面化演示

學期末老師讓設計一個多執行緒無限計算圓周率的圖形化演示內容。我採取MFC進行設計的。 其中的一個執行緒用來計算pi,採用的是之前傳的一段神奇的計算圓周率的程式碼,它採用每次計算4位的方法,很適合這個練習的可以進行演示的要求。關於這個演算法的理解我是基於以下連結點選開啟連結,

python3 執行 (threading) + 鎖 (Lock) + 控制執行數量 (Semaphore) 的例項

學習記錄:python3 多執行緒 (threading ) + 鎖 (Lock) + 控制執行緒數量 (Semaphore) 的例項 import threading import time def sub(num): global count

執行互斥訪問資源的Demo

這個程式因為把執行緒的建立寫在了建構函式裡,不用顯式啟動執行緒,也因此有些臃腫。 #include <iostream> #include <stdlib.h> #include <thread> #include <mutex> #include

Java執行之 Lock介面和ReentrantLock的使用

                在多執行緒開發中,除了synchronized這個關鍵字外,我們還能通過Lock介面來實現這種效果。通過Lock介面來實現這種多執行緒加鎖效果的好處是非常的靈活,我們不在需要對整個函式加鎖,而且可以很方便的把他放在我們函式的任何一個地方,非常的稱心,而且從效率上來說,使用Loc

Java實現執行之Callable介面

Java實現多執行緒之Callable介面 /* * 一、建立執行執行緒的方式三:實現 Callable 介面。 相較於實現 Runnable 介面的方式,方法可以有返回值,並且可以丟擲異常。 * * 二、執行 Callable 方式,需要 FutureTask 實現類的支援,用