> 백엔드 개발 > C++ > 다른 클래스의 별도 스레드에서 WPF UI를 업데이트하는 방법은 무엇입니까?

다른 클래스의 별도 스레드에서 WPF UI를 업데이트하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-05 18:57:43
원래의
368명이 탐색했습니다.

How to Update a WPF UI from a Separate Thread in a Different Class?

다른 클래스의 별도 스레드에서 UI 업데이트

Q: 별도의 클래스에서 실행되는 작업자 스레드에서 WPF UI를 업데이트하는 방법은 무엇입니까?

A: 다른 UI에서 UI를 업데이트하려면 thread:

  1. Dispatcher.Invoke 사용: 작업자 클래스 내에서 이 메서드를 호출하여 기본 스레드의 UI 요소를 업데이트합니다.
  2. 이벤트 기반 통신:

    • 작업자 클래스에서 이벤트를 생성하여 UI 업데이트 알림을 표시합니다.
    • 기본 창 클래스에서 이러한 이벤트에 대한 핸들러를 등록합니다.
    • 이벤트 핸들러 내에서 UI 업데이트를 전달합니다.

사용예시 이벤트:

// Main window class
private void startCalc(object sender, RoutedEventArgs e)
{
    // Create a new worker class instance
    CalcClass calc = new CalcClass();
    
    // Register event handler to receive UI update notifications
    calc.ProgressUpdate += (s, e) =>
    {
        Dispatcher.Invoke((Action)(() => { /* Update UI here */ }));
    };
    
    // Start the worker thread
    Thread calcThread = new Thread(new ParameterizedThreadStart(calc.TestMethod));
    calcThread.Start(input);
}

// Worker class
public class CalcClass
{
    public event EventHandler ProgressUpdate;

    public void TestMethod(object input)
    {
        // Perform calculations
        
        // Raise event to notify UI update
        if (ProgressUpdate != null)
            ProgressUpdate(this, new EventArgs());
    }
}
로그인 후 복사

추가 참고:

작업을 사용하는 대체 솔루션:
.NET 4.5 이상에서, Task와 함께 비동기 프로그래밍을 사용하여 UI를 더 깔끔하고 효율적으로 업데이트할 수도 있습니다. way.

작업을 사용하여 업데이트된 코드:

// Main window class
private async void buttonDoCalc_Clicked(object sender, EventArgs e)
{
    // Create a new worker class instance
    CalcClass calc = new CalcClass();
    
    // Start the asynchronous calculation
    await calc.CalcAsync();
}

// Worker class
public class CalcClass
{
    public async Task CalcAsync()
    {
        // Perform calculations
        
        // Update UI using Dispatcher.Invoke
        Dispatcher.Invoke((Action)(() => { /* Update UI here */ }));
    }
}
로그인 후 복사

위 내용은 다른 클래스의 별도 스레드에서 WPF UI를 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿