1.首先定义初始窗体,和主窗体。

  初始窗体(StartWindow) 主窗体(MainWindow):

2.在主窗体界面中,加载初始窗体。注意在线程中操作UI元素需要使用BeginInvoke或者Invoke方法。

  

        StartWindow start;
public MainWindow()
{
InitializeComponent();
Thread thread = new Thread(LoadResource);
thread.Start();
this.Visibility = Visibility.Hidden;
start = new StartWindow();
start.closeTheWindows += start_closeTheWindows;
start.Show();
} /// <summary>
/// 窗体start关闭之后执行
/// </summary>
private void start_closeTheWindows()
{
this.Visibility = Visibility.Visible;
} /// <summary>
/// 执行加载资源等操作
/// </summary>
/// <param name="obj"></param>
private void LoadResource(object obj)
{
Thread.Sleep();
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
{
start.Close();
});
}

MainWindow.xaml.cs

3.在startWindow中用到窗体关闭特效,定义了委托,在关闭之后显示主窗体。

 

        /// <summary>
/// 重写OnCloseIng,关闭特效
/// </summary>
bool _closinganimation = true;
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
e.Cancel = _closinganimation;
_closinganimation = false;
base.OnClosing(e); System.Windows.Media.Animation.Storyboard sb = new System.Windows.Media.Animation.Storyboard();
System.Windows.Media.Animation.DoubleAnimation dh = new System.Windows.Media.Animation.DoubleAnimation();
System.Windows.Media.Animation.DoubleAnimation dw = new System.Windows.Media.Animation.DoubleAnimation();
System.Windows.Media.Animation.DoubleAnimation dop = new System.Windows.Media.Animation.DoubleAnimation();
dop.Duration = dh.Duration = dw.Duration = sb.Duration = new Duration(new TimeSpan(, , ));
dop.To = dh.To = dw.To = ;
System.Windows.Media.Animation.Storyboard.SetTarget(dop, this);
System.Windows.Media.Animation.Storyboard.SetTarget(dh, this);
System.Windows.Media.Animation.Storyboard.SetTarget(dw, this);
System.Windows.Media.Animation.Storyboard.SetTargetProperty(dop, new PropertyPath("Opacity", new object[] { }));
System.Windows.Media.Animation.Storyboard.SetTargetProperty(dh, new PropertyPath("Height", new object[] { }));
System.Windows.Media.Animation.Storyboard.SetTargetProperty(dw, new PropertyPath("Width", new object[] { }));
sb.Children.Add(dh);
sb.Children.Add(dw);
sb.Children.Add(dop); sb.Completed += (a, b) => { this.Close(); };
sb.Begin();
}

StartWindow关闭特效代码

 

        /// <summary>
/// 关闭子窗体委托
/// </summary>
public delegate void CloseThis();
public StartWindow()
{
InitializeComponent();
} public event CloseThis closeTheWindows;
private void Window_Closed(object sender, EventArgs e)
{
closeTheWindows();
}

定义委托代码

关闭代码下载与CSDN资源:http://download.csdn.net/detail/daixin1031017817/5501187

wpf利用线程制作初始界面和关闭窗体特效的更多相关文章

  1. WPF利用radiobutton制作菜单按钮

    原文:WPF利用radiobutton制作菜单按钮 版权声明:欢迎转载.转载请注明出处,谢谢 https://blog.csdn.net/wzcool273509239/article/details ...

  2. C#子线程刷新界面并关闭窗体

    目的:要循环刷新界面上的控件,同时不影响用户操作.循环结束后关闭窗体. 步骤:先创建一个窗体,窗体中拖入一个lable控件(label1),一个button控件(button1) 代码窗口输入: // ...

  3. WPF跨线程操作UI界面控件

       在WPF应用中,如果遇到多线程的需求时,如果引用WPF控件时会引发异常,异常内容:调用线程无法访问此对象,因为另一个线程拥有该对象.具体如下: 调用代码: ThreadcountThread= ...

  4. 教你用Vegas Pro制作视频的遮罩转场特效

    很多小伙伴在接触了Vegas之后,都想利用Vegas制作出各种酷炫的特效.小编也是一样. 今天,小编就和大家分享一下,小编近期学会的遮罩转场特效. 首先想要制作遮罩转场效果,需要的素材有:至少两个图片 ...

  5. WPF 利用子线程弹出子窗体的研究

    一般来说子线程都是用来处理数据的,主窗体用来实现展现,但是有些时候我们希望子窗体实现等待效果,遮挡主窗体并使主窗体逻辑正常进行,这个业务需求虽然不多,但是正好我们用到了,于是我打算把研究成果写在这了. ...

  6. WPF 非UI线程更新UI界面的各种方法小结

    转载:https://www.cnblogs.com/bdbw2012/articles/3777594.html 我们知道只有UI线程才能更新UI界面,其他线程访问UI控件被认为是非法的.但是我们在 ...

  7. Cocos2d-x教程第(11)讲-利用遮罩(蒙版)CCLayerColor制作新手引导界面(上)

    欢迎转载,转载时请注明原文出处:http://blog.csdn.net/u012945598/article/details/17280019 源码下载地址:http://download.csdn ...

  8. 利用Java EE里jsp制作登录界面

    jsp连接数据库.百度经验. 1.在新建的Project中右键新建Floder 2.创建名为lib的包 3.创建完毕之后的工程目录 4.接下来解压你下载的mysql的jar包,拷贝其中的.jar文件 ...

  9. AndroidStudio制作欢迎界面与应用图标

    前言 大家好,给大家带来AndroidStudio制作欢迎界面与应用图标的概述,希望你们喜欢 欢迎界面与应用图标 本项目使用Android Studio 3.0.1作为开发工具 activity_sp ...

随机推荐

  1. HTML 中框架、层的运用

    本章目标:掌握框架结构<frameset><frame><iframe> 掌握组织元素:span和div 本章重点:框架结构<frameset>< ...

  2. 网络协议之ts---ts 流分析详解

    名词缩写翻译: es:elements stream 基本流 pes:packet elements stream 打包流 pts:presentation time stamp 显示时间戳 dts: ...

  3. 项目文件不完整。缺少预期导入,DotnetCore如何切换SDK版本

    1. 项目文件不完整.缺少预期导入 如图: 2. 出现原因: SDK版本与项目所需的SDK版本不一致. 3. 解决问题: 3.1 项目所需的SDK版本如何确定? a. 检查.sln文件所在目录是否有: ...

  4. 【ARIMA】Autoregressive Integrated Moving Average Model

    [理论部分] ARIMA包含两部分,自回归AR和移动平均MA: AR:Y(t)-a=b(1){Y(t-1)-a}+u(t)   其中a是y的均值, u(t)是均值为零,恒定方差的不相关随机误差项(噪声 ...

  5. Python捕获异常

    一.常见异常 1.语法错误:SyntaxError:invalid syntax (1)案例: (1)解决方法: ①查看代码有没有红色波浪线 ②熟悉python基本语法 2.变量名不存在:NameEr ...

  6. django数据库读写分离,分库

    读写分离 在settings中配置不同名称的数据库连接参数,并配置一条数据库选择路由 DATABASES = { 'default': { 'ENGINE': 'django.db.backends. ...

  7. javascript 上传文件相关 (5) Blob 对象

    这一系列文章都讲述的是关于使用 JavaScript 操作文件相关的知识,其中最重要的是 File 对象,而实际上 file 对象只是 blob 对象的一个更具体的版本,blob 存储着大量的二进制数 ...

  8. iOS 如何在一个应用程序中调用另一个应用程序

    原则上iOS的沙箱原理,是阻止一个app去访问其他app的资源乃至是系统底层的资源的但是我们可以通过一种变相的方式:通过对应的URL模式和其他程序进行通讯. iOS应用之间的调用步骤: 一, 调用自己 ...

  9. 160809、tomcat中配置多个域名及将tomcat配置成系统服务

    本地测试用的(注意红色部分) 第一步.自己的windows电脑,在c盘中有个hosts文件(搜索一下),做以下修改(其中127.0.0.1是本机地址,192.1638.10.139是我虚拟机中linu ...

  10. screen命令在freebsd安装和使用

    安装 # cd /usr/ports/sysutils/screen # make install clean 使用 # screen //以下^A表示同按“Ctrl + A”键 # ^A c //C ...