• 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();


            }

        }
    }

  • 相关阅读:
    HTML基础
    Java基础05-计算机单位
    Java基础04-运算符
    Java基础03-数据类型
    Java基础02-变量
    Java基础01-HelloWorld
    MarkDown基本使用
    短视频学习
    c# as 总结
    在C#中使用Nullable类型和 tuple类
  • 原文地址:https://www.cnblogs.com/dxmfans/p/9434793.html
Copyright © 2020-2023  润新知