DispatcherHelper

 /// <summary>
    /// 使用之前在App.Config中初始化Initialize()
    /// </summary>
    public static class DispatcherHelper
    {
        public static Dispatcher UiDispatcher { get; private set; }

        /// <summary>
        /// 检查操作是否是在UI线程上。假如操作在UI线程上则直接执行,否则调用UI Dispatcher线程执行。
        /// </summary>
        /// <param name="action"></param>
        public static void CheckBeginInvokeOnUi(Action action)
        {
            if (action == null) return;
            CheckDispatcher();

            if (UiDispatcher.CheckAccess())
            {
                action();
            }
            else
            {
                UiDispatcher.BeginInvoke(action);
            }
        }

        private static void CheckDispatcher()
        {
            if (UiDispatcher == null)
            {
                var error = new StringBuilder("The DispatcherHelper is not initialized.");
                error.AppendLine();
                throw new InvalidOperationException(error.ToString());
            }
        }

        /// <summary>
        /// 在UI线程上执行异步操作
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        public static DispatcherOperation RunAsync(Action action)
        {
            CheckDispatcher();

            return UiDispatcher.BeginInvoke(action);
        }

        /// <summary>
        /// 在APP.Config的Application_Startup中初始化Initialize
        /// </summary>
        public static void Initialize()
        {
            if (UiDispatcher != null && UiDispatcher.Thread.IsAlive)
            {
                return;
            }
            UiDispatcher = Dispatcher.CurrentDispatcher;
        }
    }

  

时间: 2024-08-24 14:41:09

DispatcherHelper的相关文章

MVVM Light须要注意的10个问题

MVVM Light须要注意的10个问题 从使用XAML技术基础開始(实际上并非非常久曾经).我便关注MVVM(Model – View – ViewModel)模式.偶然接触到MVVM Light不久后便喜欢上它的工作方式. 不光我包含业余和专业开发者在内的非常多开发者都喜欢这个函数库. 依照开发者意愿,MVVM Light 不是一个框架而是函数库,该函数库注重于探究建立一个MVVM结构而且提供一些额外的帮助类以便于应用. MVVM Light在发展过程中改变了非常多.非常多元素被增加又有非常

利刃 MVVMLight 8:DispatchHelper在多线程和调度中的使用

在应用程序中,线程可以被看做是应用程序的一个较小的执行单位.每个应用程序都至少拥有一个线程,我们称为主线程,这是在启动时调用应用程序的主方法时由操作系统分配启动的线程. 当调用和操作主线程的时候,该操作将动作添加到一个队列中.每个操作均按照将它们添加到队列中的顺序连续执行,但是可以通过为这些动作指定优先级来影响执行顺序,而负责管理此队列的对象称之为线程调度程序. 在很多情况下,我们启动新的线程主目的是执行操作(或等待某个操作的结果),而不会导致应用程序的其余部分被阻塞.密集型计算操作.高并发I/

WPF的启动项

最近需要给软件加上登陆界面,所以需要修改WPF的APP 首先,在APP.xaml.cs中写界面的启动程序: public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown; if (******) { ba

Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

原文:Win10 UWP开发系列--开源控件库:UWPCommunityToolkit 在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在Github上:https://github.com/Microsoft/UWPCommunityToolkit 包括以下几个类库: 都可以很方便的从Nuget上安装. NuGet Package Name des

委托、lambda表达式、回调

今天接手wpf版的交通管理项目,由于前人一走,剩下一堆半成熟的代码交由我负责,随之我就开始了痛苦的阅读代码的过程. 前人是一个从事了5年的高手,写的代码很高深,各种委托.事件.lambda.回调到处都是,向我这种只懂简单的委托和事件的小白,读起来可想多痛苦.最痛苦的是,很少甚至没有注释,我顿时无语了.工作还得做,毕竟还得混下去,我就慢慢看他写的代码.今天看他的某个代码中的某个方法,具体如下. 下面的这个方法是执行查询的某个方法 1 /// <summary> 2 /// 执行查询 3 ///

Aspose.cells 处理Excel文件

//浏览Excel文件 private void btnScan_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "xlsx"; ofd.Filter = "Excel file|*.xlsx"; if (ofd.ShowDialog() == true) { this.txtFilePath.Text = of

桌面下雪效果(二)

增加系统托盘图标,并取消任务栏图标 1.取消任务栏图标 启动窗口设置ShowInTaskbar="False" <Window x:Class="SnowEffect.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&q

WPF-模拟Application.DoEvents的类

/// <summary>    ///     /// </summary>    public static class DispatcherHelper    {        /// <summary>        /// Simulate Application.DoEvents function of <see cref=" System.Windows.Forms.Application"/> class.       

MVVM Light需要注意的10个问题

MVVM Light需要注意的10个问题 从使用XAML技术基础开始(实际上并不是很久以前),我便关注MVVM(Model – View – ViewModel)模式.偶然接触到MVVM Light不久后便喜欢上它的工作方式.不光我包括业余和专业开发人员在内的很多开发人员都喜欢这个函数库.按照开发者意愿,MVVM Light 不是一个框架而是函数库,该函数库注重于探究建立一个MVVM结构并且提供一些额外的帮助类以便于应用. MVVM Light在发展过程中改变了很多,很多元素被加入又有很多元素被