• WPF Dispatcher的使用


    

    <Window x:Class="DispatcherExam.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <StackPanel>
                <Label x:Name="lblHello">欢迎你光临WPF的世界!</Label>
                <Button Name="btnThd" Click="btnThd_Click">多线程同步调用</Button>
                <Button Name="btnAppBeginInvoke" Click="btnAppBeginInvoke_Click" >BeginInvoke 异步调用</Button>
            </StackPanel>
        </Grid>
    </Window>


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Windows.Threading;

    namespace DispatcherExam
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                this.Dispatcher.Thread.Name = "MainThread";
            }

            private void btnThd_Click(object sender, RoutedEventArgs e)
            {
                Thread th = new Thread(ModifyUI);
                th.Name = "SubThread";
                th.Start();
            }
            private void ModifyUI()
            {

                // 模拟一些工作正在进行

                Thread.Sleep(TimeSpan.FromSeconds(2));

                //lblHello.Content = "欢迎你光临WPF的世界,Dispatcher";
                MessageBox.Show(this.Dispatcher.Thread.Name); //MainThread
                this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate()
                {
                    lblHello.Content = "欢迎你光临WPF的世界,Dispatche  同步方法 !!";

                });


            }

            private void btnAppBeginInvoke_Click(object sender, RoutedEventArgs e)
            {
                new Thread(() =>
                {

                    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal,

                        new Action(() =>
                        {

                            Thread.Sleep(TimeSpan.FromSeconds(2));

                            this.lblHello.Content = "欢迎你光临WPF的世界,Dispatche 异步方法!!" + DateTime.Now.ToString();

                        }));

                }).Start();


            }

        }
    }

  • 相关阅读:
    mysql基础学习
    Linux退出状态码
    python psutil简单示例
    linux systemctl 常用用法简介
    (转)linux进程的地址空间,核心栈,用户栈,内核线程
    (转)NAT原理与NAT穿越
    (转)蜜果私塾:http协议学习系列——协议详解篇
    (转)Windows 7下安装配置PHP+Apache+Mysql环境教程
    (转)蜜果私塾:http协议学习和总结系列 ——协议详解篇
    (转)Linux Futex的设计与实现
  • 原文地址:https://www.cnblogs.com/dxmfans/p/9434793.html
Copyright © 2020-2023  润新知