Urgent.News

What's breaking now, across thousands of outlets.

Tech

Deep Dive into WPF — Threading Model and Dispatcher

I'm starting this Deep Dive into WPF series. By "deep dive" I mean striving to explain each topic thoroughly. Of course perfection is out of reach—if anything is wrong, friends are welcome to point it out; I'll keep supplementing the series and try to do it justice. Typically, a WPF application starts with two threads: one for rendering and one for managing the UI. The rendering thread…

This series aims to provide a thorough explanation of various topics related to WPF (Windows Presentation Foundation). Each article will strive for perfection, and readers are encouraged to provide feedback if they find any errors. In a typical WPF application, two threads are involved: the rendering thread and the UI thread. The rendering thread operates in the background, while the UI thread is responsible for handling input, events, drawing the screen, and running application code. The UI thread utilizes an object called a Dispatcher to manage tasks.

The Dispatcher acts similarly to Win32's message queue, playing a crucial role in processing tasks. When a work item is added to the Dispatcher, it is stored in a DispatcherOperation object, which wraps the task. The Dispatcher ensures that each work item is executed in the correct order based on priority.

Unlike traditional Windows programming, where the message pump is implemented at the thread level, WPF maintains a singleton Dispatcher instance per thread. When the Dispatcher is requested, it checks a static list of existing Dispatchers. If one doesn't exist for the current thread, a new Dispatcher object is created and added to the list. Each Dispatcher is associated with its respective thread, ensuring that only one Dispatcher can operate on a single thread at a time.

WPF supports the existing Windows messaging mechanism, maintaining compatibility with older technologies. The Dispatcher inherits this functionality, calling the familiar window-class registration, window creation, and message pump setup processes. The message pump, a loop that continuously retrieves messages from the thread's queue and dispatches them to the appropriate windows, is established within the Dispatcher.

The Dispatcher processes tasks by calling the traditional window-class registration, window creation, and message pump setup. When a message is received by a window procedure, it is translated and routed accordingly. The Dispatcher acts as a centralized queue for these messages, storing them in DispatcherOperation objects, which allows for better management and execution of tasks.

In summary, WPF's threading model introduces the Dispatcher, a central object that manages work items and ensures efficient processing of tasks within the UI thread. By maintaining a Dispatcher per thread and utilizing work items wrapped in DispatcherOperation objects, WPF offers an organized approach to handling tasks while preserving compatibility with existing Windows messaging mechanisms.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

Deep Dive into WPF — How to Learn WPF Well

WPF has been around for a long time. It is no longer a novelty, yet it still has real vitality — plenty of people still build UIs with it. Learning WPF often starts fast.

  • WPF is a graphics engine from .NET 3.0 era, managed wrapper over Direct3D
  • XAML UI description language, similar to HTML markup
  • Dependency properties crucial to mastering WPF

How to Read a ZIP File

Learning how to read a ZIP file is useful when working with documents, photos, videos, and other files downloaded from the internet or received through email.

  • ZIP files bundle multiple files into a single package with .zip extension
  • Windows users can open ZIP files by right-clicking and selecting Open
  • Mac users can extract ZIP contents by double-clicking the file

Embedded, Then Embedding

One word that followed me for decades — embedded system, then embedded Linux, then ML embeddings — each time a different creature. A look back — long before any of the tools we argue about now.

More from Saturday 31 October →