wpf中的DispatcherTimer基本用法,本文不在叙述。主要写一些不同的,来提醒自己不要再犯同样错误。

前几天写代码时发现。当在非UI线程创建DispatcherTimer实例时,程序无法进入Tick事件

private static System.Windows.Threading.DispatcherTimer timer;

private void Button_Click(object sender, RoutedEventArgs e)
{
new System.Threading.Thread(CreateTimer).Start();
} private void CreateTimer()
{
timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += DispatcherTimer_Click;
timer.Start();
} private void DispatcherTimer_Click(object sender, EventArgs e)
{
Console.WriteLine("DispatcherTimer_Click");
}

在DispatcherTimer_Click函数入口设断点,发现程序无法进入。

如果这样创建对象

private static System.Windows.Threading.DispatcherTimer timer;

private void Button_Click(object sender, RoutedEventArgs e)
{
new System.Threading.Thread(CreateTimer).Start();
} private void CreateTimer()
{
timer = new System.Windows.Threading.DispatcherTimer(System.Windows.Threading.DispatcherPriority.SystemIdle, this.Dispatcher);
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += DispatcherTimer_Click;
timer.Start();
} private void DispatcherTimer_Click(object sender, EventArgs e)
{
Console.WriteLine("DispatcherTimer_Click");
}

程序可以进入Tick事件。

或者这样创建对象

private static System.Windows.Threading.DispatcherTimer timer;

private void Button_Click(object sender, RoutedEventArgs e)
{
new System.Threading.Thread(CreateTimer).Start();
} private void CreateTimer()
{
this.Dispatcher.Invoke(() =>
{
timer = new System.Windows.Threading.DispatcherTimer();
});
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += DispatcherTimer_Click;
timer.Start();
} private void DispatcherTimer_Click(object sender, EventArgs e)
{
Console.WriteLine("DispatcherTimer_Click");
}

原因如下

DispatcherTimer.Tick 集成到按指定时间间隔和指定优先级处理的 Dispatcher 队列中的计时器。

在线程中创建DispatcherTimer对象时,DispatcherTimer的Dispatcher是线程的Dispatcher。

而此时如果线程如果没有操作UI对象,则其Dispatcher==null,详情见博客

WPF DispatcherTimer一些个人看法 (原发布 csdn 2017-04-25 19:12:22)的更多相关文章

  1. 关于“关于C#装箱的疑问”帖子的个人看法 (原发布csdn 2017年10月07日 10:21:10)

    前言 昨天晚上闲着无事,就上csdn逛了一下,突然发现一个帖子很有意思,就点进去看了一下. 问题很精辟 int a = 1; object b=a; object c = b; c = 2; 为什么b ...

  2. wpf 单例模式和异常处理 (原发布 csdn 2017-04-12 20:34:12)

    第一次写博客,如有错误,请大家及时告知,本人立即改之. 如果您有好的想法或者建议,我随时与我联系. 如果发现代码有误导时,请与我联系,我立即改之. 好了不多说,直接贴代码. 一般的错误,使用下面三个就 ...

  3. c# Equal函数 and 运算符'==' (原发布 csdn 2017年10月15日 20:39:26)

    1.==.!=.<.>.<= 和>= 运算符为比较运算符(comparison operator).C#语言规范5.0中文版中比较运算符的描述如下: 2.通用类型系统 3.值类 ...

  4. WPF DataGrid显示MySQL查询信息,且可删除、修改、插入 (原发布 csdn 2018-10-13 20:07:28)

    1.入行好几年了,工作中使用数据库几率很小(传统行业).借着十一假期回家机会,学习下数据库. 2.初次了解数据库相关知识,如果本文有误,还望告知. 3.本文主要目的,记录下wpf界面显示数据库信息,且 ...

  5. WPF 启动页面 (原发布 csdn 2017-06-26 19:26:01)

    如果我写的有误,请及时与我联系,我立即改之以免继续误导他/她人. 如果您有好的想法或者建议,请随时与我联系. wpf软件启动时,加载启动页面.软件初始化完成之后关闭页面. App.xaml.cs代码 ...

  6. IEEE浮点表示 (原发布 csdn 2018-10-14 10:29:33)

    目录 观察IEEE浮点表示 工作中遇到过整型转浮点型(union那种转换),碰到就看下书,过后就遗忘了.等过段时间又出现此现象,又重新拿起书本,这次记录了过程.然而一直等到今天才写出来,以防以后还用到 ...

  7. c# 类实例序列化反序列化json文件 (原发布 csdn 2017-10-01 20:02:12)

    前言 前段时间使用了net.json保存对象数据.添加完成后,测试发现300多实例数据保存加载json文件,速度比原方式(BinaryFormatter)慢.但是功能加上后也懒再删掉代码了,索性就采用 ...

  8. C# 流介绍 (原发布 csdn 2017-09-15 23:37:52)

    1.FileStream FileStream 详细介绍参考msdn 写数据: using (FileStream fs = new FileStream("File.FileStream& ...

  9. datalab (原发布 csdn 2018年09月21日 20:42:54)

    首先声明datalab本人未完成,有4道题目没有做出来.本文博客记录下自己的解析,以便以后回忆.如果能帮助到你就更好了,如果觉得本文没啥技术含量,也望多多包涵. /* * bitAnd - x& ...

随机推荐

  1. xcode6新建工程

    xcode6中新建空工程 (2014-10-29 13:14:44) 转载▼ 标签: it ios 分类: iOS 升级xcode6之后,直接建立Empty工程后发现,这是太坑,真的是什么都没有啊.只 ...

  2. Linux环境oracle导库步骤

    1.xshell登录linux 2.切换oracle用户 su - oracle 3.创建directory仓库目录,存放数据库dmp文件 //DIRFILE_zy 表示目录名称 后面的是实际地址 c ...

  3. Mysql Join-连接查询(上)

    认识 多表连接查询,我感觉应该是关系型数据库最能体现其价值和灵活性的地方吧. 我觉得数据库的作用, 归纳起来无非就是存储和查询. 一言蔽之,数据库就是能灵活地存储和查询数据. 存储上, 也是以文件的方 ...

  4. Linux 用epoll实现的简单http服务器

    Linux 用epoll实现的简单http服务器 main.c #include <stdio.h> #include <sys/types.h> #include <s ...

  5. MAC盗版软件下载网站黑名单

    上面有大量的开源软件或者免费软件,拒绝盗版从我做起, 下面被删除的网站提供大量破解软件下载,欢迎大家监督它们. 玩转苹果:http://www.ifunmac.com Mac软件下载站:http:// ...

  6. Rust中的迭代器

    和闭包一样,练代码 struct Counter { count: u32, } impl Counter { fn new() -> Counter { Counter {count: } } ...

  7. JS三座大山再学习 ---- 异步和单线程

    本文已发布在西瓜君的个人博客,原文传送门 前言 写这一篇的时候,西瓜君查阅了很多资料和文章,但是相当多的文章写的都很简单,甚至互相之间有矛盾,这让我很困扰:同时也让我坚定了要写出一篇好的关于JS异步. ...

  8. 第14节_BLE协议ATT层

    下面这个图是BLE协议各层跟医院的各个科室的类比图: 跟医院类比,ATT层就是化验室,通过它可以得到各种检查结果──属性.这些检查结果之间有什么联系,它们组合起来体现了什么,化验室是不知道的,这些得由 ...

  9. c# 第8节 变量、变量名命令规则、作用域、@的作用

    本节内容: 1:变量 2:变量名命令规则 3:常量 4:变量和常量的作用域 5:@的作用 1:变量是什么? 计算即中存储变量的也是三步骤: 实例: 2:变量命令规则 练习: 3.常量 实现: 4:变量 ...

  10. hbase配置hdfs的HA之后需要修改的路径

    hbase-site.xml中配置了hdfs的一个路径 <property> <name>hbase.rootdir</name> <value>hdf ...