WPF防止界面卡死并显示加载中效果

原文:WPF防止界面卡死并显示加载中效果

网上貌似没有完整的WPF正在加载的例子,所以自己写了一个,希望能帮到有需要的同学

前台:

<Window x:Class="WpfApplication1.Loading"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Loading" Height="320" Width="570">
<Grid>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="41,20,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<DataGrid AutoGenerateColumns="False" Height="99" HorizontalAlignment="Left" Margin="40,70,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="441" />
<Canvas Name="loading" RenderTransformOrigin="0.5,0.5" Visibility="Collapsed" HorizontalAlignment="Center" VerticalAlignment="Center" Width="120" Height="120" Margin="187,76,241,85">
<Ellipse Width="15" Height="15" Canvas.Left="55" Canvas.Top="31" Stretch="Fill" Fill="#FFD1D1F7" Opacity="1.0"/>
<Ellipse Width="15" Height="15" Canvas.Left="38" Canvas.Top="39" Stretch="Fill" Fill="Blue" Opacity="0.8"/>
<Ellipse Width="15" Height="15" Canvas.Left="36" Canvas.Top="58" Stretch="Fill" Fill="#FF0000FE" Opacity="0.7"/>
<Ellipse Width="15" Height="15" Canvas.Left="52" Canvas.Top="67" Stretch="Fill" Fill="Blue" Opacity="0.6"/>
<Ellipse Width="15" Height="15" Canvas.Left="68" Canvas.Top="61" Stretch="Fill" Fill="#FF2E2EFF" Opacity="0.5"/>
<Ellipse Width="15" Height="15" Canvas.Left="69" Canvas.Top="42" Stretch="Fill" Fill="#FF6F6FFF" Opacity="0.4"/>
<Canvas.RenderTransform>
<RotateTransform x:Name="SpinnerRotate" Angle="0" />
</Canvas.RenderTransform>
<Canvas.Triggers>
<EventTrigger RoutedEvent="ContentControl.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SpinnerRotate" Storyboard.TargetProperty="(RotateTransform.Angle)" From="0" To="360" Duration="0:0:0.8" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Canvas.Triggers>
</Canvas>
<Label Name="lab_pro" Content="Label" Height="28" Margin="140,14,315,239" />
</Grid>
</Window>

后台:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Shapes;
using System.ComponentModel;

namespace WpfApplication1
{
/// <summary>
/// Loading.xaml 的交互逻辑
/// </summary>
public partial class Loading : Window
{
public Loading()
{
InitializeComponent();
}
BackgroundWorker bgMeet;
private void button1_Click(object sender, RoutedEventArgs e)
{
bgMeet = new BackgroundWorker();
bgMeet.WorkerReportsProgress = true;
bgMeet.DoWork += new DoWorkEventHandler(bgMeet_DoWork);
bgMeet.ProgressChanged += new ProgressChangedEventHandler(bgMeet_ProgressChanged);
bgMeet.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgMeet_RunWorkerCompleted);
bgMeet.RunWorkerAsync();
}
void bgMeet_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
loading.Visibility = System.Windows.Visibility.Collapsed;
this.Dispatcher.Invoke(new Action(() =>
{
this.lab_pro.Content = "完成";
}));
}
void bgMeet_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.Dispatcher.Invoke(new Action(() =>
{
this.lab_pro.Content = e.ProgressPercentage;
}));
}

void bgMeet_DoWork(object sender, DoWorkEventArgs e)
{
this.Dispatcher.Invoke(new Action(() =>
{
loading.Visibility = System.Windows.Visibility.Visible;
}));
GetData();
}
public void GetData()
{
for (int i = 0; i < 11; i++)
{
bgMeet.ReportProgress(i);
System.Threading.Thread.Sleep(500);
}
}
}
}

这个花了我不少时间总结的哦,要转载的同学 记得保存我的连接http://www.cnblogs.com/linyijia/archive/2013/02/06/2900609.html,不做纯粹的伸手党哦

原文地址:https://www.cnblogs.com/lonelyxmas/p/10789523.html

时间: 2024-11-16 03:08:56

WPF防止界面卡死并显示加载中效果的相关文章

jquery mobile中显示加载中提示框和关闭提示框

在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更好一些. 先看两个方法,显示和关闭,方法来自于参考:http://blog.csdn.net/zht666/article/details/8563025 <script> //显示加载器 function showLoader() { //显示加载器.for jQuery Mobile 1.2.

jquery Mobile点击显示加载等待效果

点击某个按钮或链接时,触发等待加载效果: Xml代码   <script> <!-- $(document).bind("mobileinit", function(){ }); $( function() { //默认设置,一个小圈圈在转 $('#default').live( 'tap', function() { $.mobile.loadingMessageTextVisible = false; $.mobile.showPageLoadingMsg();

微信小程序 在使用wx.request时显示加载中

微信小程序中,向后台请求数据是,通常想给用户提示正在加载中,如下图: 我们可以用wx.showLoading(OBJECT),当请求服务器的地方多了,怎么才能不每次都要去调用函数,我们只要对wx.request加工下就可以了,在utils下新建js文件network.js var requestHandler = { url: '', data: {}, method: '', success: function (res) { }, fail: function () { }, complet

极客编程挑战#018:设计独一无二的页面 ”加载中“ 效果

本期挑战 请使用以下开练 LOGO 素材 为基础(三选一即可): 图片(base64):http://www.gbtags.com/gb/rtreplayerpreview/808.htm SVG图形:http://www.gbtags.com/gb/rtreplayerpreview/809.htm 或者基于以上图形的的自定义LOGO设计 挑战要求: 使用你所熟悉的任意前端技术(JS,CSS3,画布,SVG动画等等),生成一个漂亮动态的 ”页面加载中“ 效果,持续5秒后,页面即导向地址:htt

《H5 App开发》MUI框架显示加载中动画

最近使用MUI框架比较多,现在有个需求就是在每个页面加上一个加载中动画 如图: 在百度上找到两个MUI框架的加载中样式, 第一种是需要引用一个js库,在这里不多做解释,小编推荐第二种方式, 只需要一串代码就可以实现 <div class="mui-loading" v-if="loading"> <div class="mui-spinner"></div> </div> 可以利用vue中v-if来

jquery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较

想要添加这个效果,先来弄明白页面的加载和事件执行顺序,看这个简单例子: 1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head > 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <title>验证加载顺序</title> 5 <s

使用svg显示加载中提示界面

<div> <ul v-if="true"> <li></li> <li></li> <li></li> </ul> <ul v-else="false"> <li> <img src="../images/icon.svg"> </li> </ul> 原文地址:https://w

Android 三种方式实现自定义圆形页面加载中效果的进度条

转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76872 一.通过动画实现 定义res/anim/loading.xml如下: [java] view plaincopy <?xml version="1.0" encoding="UTF-8"?> <animation-list android:oneshot="false" xmlns:androi

jquery 显示“加载状态 结束”

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head runat="server"> 4