经常要考虑的,后台的耗时操作不要卡死主界面的问题。

<StackPanel VerticalAlignment="Center">
    <Label x:Name="lblHello">欢迎你光临WPF的世界!</Label>
    <Button Name="btnThd" Click="btnThd_Click" >多线程同步调用</Button>
    <Button Name="btnAppBeginInvoke" Click="btnAppBeginInvoke_Click" >BeginInvoke 异步调用</Button>
</StackPanel>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void ModifyUI()
    {
        //// 模拟一些工作正在进行
        //Thread.Sleep(TimeSpan.FromSeconds(2));
        //lblHello.Content = "欢迎你光临WPF的世界,Dispatcher";

        // 模拟一些工作正在进行
        Thread.Sleep(TimeSpan.FromSeconds(3));
        this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
        {
            lblHello.Content = "欢迎你光临WPF的世界,Dispatche  同步方法 !!";
        });
    }

    private void btnThd_Click(object sender, RoutedEventArgs e)
    {
        Thread thread = new Thread(ModifyUI);
        thread.Start();
    }

    private void btnAppBeginInvoke_Click(object sender, RoutedEventArgs e)
    {
        new Thread(() =>
        {
            Thread.Sleep(TimeSpan.FromSeconds(3));
            Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                new Action(() =>
                {
                    //Thread.Sleep(TimeSpan.FromSeconds(3)); // 放这里还是会卡 UI 界面线程
                    this.lblHello.Content = "欢迎你光临WPF的世界,Dispatche 异步方法!!" + DateTime.Now.ToString();
                }));
        }).Start();
    }
}

这样调用,是不会卡主界面的。


参考:

https://www.cnblogs.com/chillsrc/p/4482691.html

原文地址:http://www.cnblogs.com/huvjie/p/16884256.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性