WPF刷新界面之坎坷路

时间:2022-09-02 13:08:18

WPF刷新界面之坎坷路

项目需要一个硬件检测功能,需要用到界面刷新,刚开始想用个定时器,对检测过的硬设定时添加后刷新界面。

但是很遗憾,定时器并不能进行刷新。后台检测List数据里面已经添加了很多了很多数据了,就是不能显示到界面

然后百度一下“WPF刷新界面”找了好几篇文章,大致都是如下代码:

 public class UIHelper : Application
{
//刷新界面
private static DispatcherOperationCallback
exitFrameCallback = new DispatcherOperationCallback(ExitFrame);
public static void DoEvents()
{
DispatcherFrame nestedFrame = new DispatcherFrame();
DispatcherOperation exitOperation =
Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Background,
exitFrameCallback, nestedFrame);
Dispatcher.PushFrame(nestedFrame); if (exitOperation.Status != DispatcherOperationStatus.Completed)
{
exitOperation.Abort();
}
}
private static object ExitFrame(object state)
{
DispatcherFrame frame = state as DispatcherFrame;
frame.Continue = false;
return null;
}
}

我把代码手敲下来,(注意不是复制,应为我不是太懂,这里也劝大家不要轻易复制,因为复制就算解决问题

了下次你还是不知道怎么回事)。在我添加数据后面调用UIHelper .DoEvents(),但是还是没有反应。依然不

刷新,我就郁闷了,别人可以解决为啥到我这就不能用了呢,请教各位大神,这个怎么用啊?有什么前提条件

吗?请我告诉我……

然后继续找啊找啊,在CSDN上找到了类似的问题。原来list<T>没有数据更新的功能,这里面需要用

ObservableCollection<T> 类 或 BindingList<T> 类 代替 List 类,看ObservableCollection<T>在帮助文档里的说明,

这个提供自动更新数据的接口,可以自动向控件发送更新消息,果断一实验。OK成功显示。

 public partial class Window2 : Window
{
DispatcherTimer _mainTimer;
public Window2()
{
InitializeComponent();
_mainTimer = new DispatcherTimer();
_mainTimer.Interval = TimeSpan.FromSeconds(1);
_mainTimer.Tick += new EventHandler(_mainTimer_Tick);
_mainTimer.IsEnabled = true;
} void _mainTimer_Tick(object sender, EventArgs e)
{
if (progressBar1.Value == progressBar1.Maximum)
progressBar1.Value = 0; progressBar1.Value++;
DeviceCheckInfo device = new DeviceCheckInfo();
device.CheckResult = true;
device.Name = "发卡器" + progressBar1.Value;
device.CheckContent = "打卡短短"; Dispatcher.BeginInvoke(new Action(() => {
if (list != null)
list.Add(device);
lbtest.ItemsSource = list;
// UIHelper.DoEvents();
})); }
ObservableCollection<DeviceCheckInfo> list;
private void Window_Loaded(object sender, RoutedEventArgs e)
{ list = new ObservableCollection<DeviceCheckInfo>(){
new DeviceCheckInfo {Name="三合一读卡器",CheckContent="duankou",CheckResult=true },
new DeviceCheckInfo {Name="发卡器",CheckContent="tongdao",CheckResult=false },
new DeviceCheckInfo {Name="打印机",CheckContent="youzhi" ,CheckResult=true}
};
lbtest.ItemsSource = list; } private void button1_Click(object sender, RoutedEventArgs e)
{
DeviceCheckInfo device = new DeviceCheckInfo();
device.CheckResult = true;
device.Name = "发卡器" + progressBar1.Value;
device.CheckContent = "打卡短短";
list.Add(device);
lbtest.ItemsSource = list;
} }
效果如下:

WPF刷新界面之坎坷路

收藏
关注
评论
 
分类: WPF

WPF刷新界面之坎坷路的更多相关文章

  1. WPF刷新界面

    Winform 里有 Application.DoEvents();可刷新! WPF 里没这个,尽管可用委托实现多线程,但是刷新还是不行! 后来找到了 类似App.DoEvents()的方法(): 代 ...

  2. 坎坷路:ASP&period;NET Core 1&period;0 Identity 身份验证(中集)

    上一篇:<坎坷路:ASP.NET 5 Identity 身份验证(上集)> ASP.NET Core 1.0 什么鬼?它是 ASP.NET vNext,也是 ASP.NET 5,以后也可能 ...

  3. 【源码分享】WPF漂亮界面框架实现原理分析及源码分享

    1 源码下载 2 OSGi.NET插件应用架构概述 3 漂亮界面框架原理概述 4 漂亮界面框架实现  4.1 主程序  4.2 主程序与插件的通讯   4.2.1 主程序获取插件注册的服务   4.2 ...

  4. 重复点击主界面&lpar;TabBar&rpar;按钮刷新界面--点击状态栏回到顶部

    1.监听按钮点击   2.判断是否是点击的同一个按钮(记录上次点击的按钮)   3.当重复点击相同按钮时,需要获取当前按钮对应控制器刷新界面      3.1 判断是否重复点击按钮,代码写在哪里?   ...

  5. C&num;子线程刷新界面并关闭窗体

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

  6. 使用Jquery解决Asp&period;Net中下拉列表值改变后访问服务器刷新界面。

    使用DropDownList控件时,改变选项时,获取服务端数据库数据并刷新界面数据. 1. 绑定DropDownList控件SelectedIndexChanged事件. 2. AutoPortBac ...

  7. 使用OC和swift创建系统自带的刷新界面

    使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用 ...

  8. ListView中响应item的点击事件并且刷新界面

    ---恢复内容开始--- 最近在在实现listview功能中遇到了这个问题: 点击事件写在了adapter的item中,不知道如何在listview的点击事件中更新数据的显示: 总结:1.要使用not ...

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

    原文:WPF防止界面卡死并显示加载中效果 网上貌似没有完整的WPF正在加载的例子,所以自己写了一个,希望能帮到有需要的同学 前台: <Window x:Class="WpfApplic ...

随机推荐

  1. C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  2. 数据库知识整理&lt&semi;七&gt&semi;

    组合查询: 7.1使用子查询: 嵌套在其他查询中的查询,我们称之为子查询.子查询本身也可能包含一个子查询.子查询也称为内部查询,而包含子查询的语句也称为外部查询. 所有的子查询可以被分为两个类别:子查 ...

  3. Asp&period;net中使用资源文件实现网站多语言

    首先需要新建一个ASP.NET Web Application.然后右键项目文件Add->Add ASP.NET Folder->App-GlobalResources. 新建好资源文件夹 ...

  4. HDOJ 2089 不要62(打表)

    Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...

  5. 双网卡&plus;mitmproxy&plus;iptables搭建SSL中间人(支持非HTTPS协议)

    "想要解决一个问题,最根本方法的就是了解这一切是如何工作的,而不是玄学." --ASCII0X03 最近学习发现现在很多现成的安卓SSL中间人工具和教程都只针对HTTPS流量,比如 ...

  6. D&period; Artsem and Saunders

    一个变换题 给定f(x),[1,n]->[1,n] 构造g(x),h(x)满足: g(h(x))=x [1,n]->[1,m] h(g(x))=f(x) [1,m]->[1,n] 根 ...

  7. Part-Nine

    1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.

  8. Linux之间配置SSH互信(SSH免密码登录)

    为简化SSH过程,采用证书方式,免去SSH登入时需要输入账号密码的过程,具体操作如下: 一.在SSH服务器所在机器上 1.以root用户登录,更改ssh配置文件 /etc/ssh/sshd_confi ...

  9. 原!linux脚本统计

    #! /bin/sh first=$ first2=$ input2=$ let second=`date -d "-1 days ago ${input2}" +%Y%m%d` ...

  10. 什么是web&quest;什么是web服务器?什么是应用服务器?

    1.什么是Web? 简单来说,Web就是在Http协议基础之上,利用浏览器进行访问的网站.目前来看最常用的意义是指在 Intenet 上和 HTML 相关的部分.换句话说,目前在 Intenet 上通 ...