直接贴代码了:

TimeShowerWindow.xaml

<Window x:Class="HelloWorld.TimeShowerWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:HelloWorld"
mc:Ignorable="d"
Title="WPF Timer" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Padding" Value="5" />
<Setter Property="Margin" Value="5" />
</Style>
</Window.Resources> <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions> <StackPanel Orientation="Horizontal">
<Button x:Name="startDispatcher" Content="Start Dispatcher Timer" Click="StartDispatcher" />
<Button x:Name="startTimer" Content="Start Timer" Click="StartTimer" />
<Button x:Name="reset" Content="Reset" IsEnabled="False" Click="Reset" />
</StackPanel> <Label x:Name="clock"
Grid.Row="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontSize="25"
FontWeight="Bold" />
</Grid>
</Window>

TimeShowerWindow.xaml.cs

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows;
using System.Windows.Threading; namespace HelloWorld
{
/// <summary>
/// TimeShowerWindow.xaml 的交互逻辑
/// </summary>
public partial class TimeShowerWindow : Window
{
private DispatcherTimer dispatcherTimer; //方式1(推荐WPF开发时使用) private Timer timer; //方式2:通用方式 public TimeShowerWindow()
{
InitializeComponent(); // 方式1 - 对象初始化,以及指定相应的委托程序
dispatcherTimer = new DispatcherTimer { Interval = new TimeSpan(, , ) };
dispatcherTimer.Tick += OnDispatcherTimer; // 方式2 - 对象初始化,以及指定相应的委托程序
timer = new Timer(OnTimer, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
} /// <summary>
/// 方式1 的按钮点击事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StartDispatcher(object sender, RoutedEventArgs e)
{
dispatcherTimer.Start();
ShowTime();
EnableStartButtons(false);
} /// <summary>
/// 方式2 的按钮点击事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StartTimer(object sender, RoutedEventArgs e)
{
timer.Change(TimeSpan.Zero, new TimeSpan(, , ));
EnableStartButtons(false);
} /// <summary>
/// 重置按钮的点击事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Reset(object sender, RoutedEventArgs e)
{
timer.Change(Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
dispatcherTimer.Stop();
EnableStartButtons(true);
clock.Content = string.Empty;
} /// <summary>
/// 启用或禁用按钮
/// </summary>
/// <param name="enabled"></param>
private void EnableStartButtons(bool enabled)
{
startDispatcher.IsEnabled = enabled;
startTimer.IsEnabled = enabled;
reset.IsEnabled = !enabled;
} private void OnDispatcherTimer(object sender, EventArgs e)
{
ShowTime();
} private void OnTimer(object state)
{
//子线程中更新 UI 线程,必须使用
Dispatcher.Invoke(() => ShowTime());
} /// <summary>
/// 此方法运行在 UI 线程
/// </summary>
private void ShowTime()
{
clock.Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}

运行截图

谢谢浏览!

一个简单的 WPF 程序,用于显示实时时间的更多相关文章

  1. 分析一个简单的WPF程序

    1.新建WPF项目 使用Visual Studio 代码编辑器点击新建项目,选择 WPF应用后点击下一步: 在新窗口中我们填写项目名称.选择项目位置后点击创建就完成了WPF项目的创建. 2.WPF项目 ...

  2. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...

  3. WInform 创建一个简单的WPF应用

    (一)创建一个简单的WPF应用 首先,在这里我要说明的是:这里的例子,都是通过控制台程序来创建WPF应用,而非使用现成的WPF模版.因为WPF模版封装了创建WPF应用所需要的各种基本元素,并不利于我们 ...

  4. 制作一个简单的WPF图片浏览器

    原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1.  对指定文件夹下所有JPG文件进行预览2.  对选定图片进行旋转3.  对选定图片 ...

  5. 利用JSP编程技术实现一个简单的购物车程序

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  6. 第一讲 一个简单的Qt程序分析

    本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton&g ...

  7. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  8. 用C语言编写一个简单的词法分析程序

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...

  9. 一个简单的JSP程序示例

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

随机推荐

  1. laravel集成workerman,使用异步mysql,redis组件时,报错EventBaseConfig::FEATURE_FDS not supported on Windows

    由于laravel项目中集成了workerman,因业务需要,需要使用异步的mysql和redis组件. composer require react/mysql composer require c ...

  2. JavaScript判断对象和数组

    在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象,接口返回的data数据应该统一返回json对象,便于扩展),而在有数据时返回的是json ...

  3. Four Ways to Read Configuration Setting in C#(COPY)

    Introduction This article will demonstrate us how we can get/read the configuration setting from Web ...

  4. Flask笔记:RESTful

    RESTful是用于前台和后端进行通信的一种规范或者说一种风格,采用的是HTTP和HTTPS协议,数据传输的格式使用的都是JSON,而不是XML.通常,RESTful的URL中只有名词,没有动词,而且 ...

  5. 多线程学习二:线程池 ExecutorService

    创建线程池的2种方式: 使用线程池方式1--Runnable接口: 通常,线程池都是通过线程池工厂创建,再调用线程池中的方法获取线程,再通过线程去执行任务方法. Executors:线程池创建工厂类: ...

  6. django4-模板进阶

    1.模板系统的语法 引用变量数据: {{  }} 标签逻辑操作:{%...%} 2.变量 变量名由字符数字下划线组成 ,可以执行由视图函数传过来的对象的方法和属性 ,但是视图函数中如果使用 ' . ' ...

  7. RV32FDQ/RV64RDQ指令集(1)

    Risc-V架构定义了可选的单精度浮点指令(F扩展指令集)和双精度浮点指令(D扩展指令集),以及四精度浮点指令集(Q扩展指令集).Risc-V架构规定:处理器可以选择只实现F扩展指令子集而不支持D扩展 ...

  8. Dynamics 365 登录报错:MSIS7042

    微软动态CRM专家罗勇 ,回复329或者20190504可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 今天访问我的CRM环境报错,AD FS登录页面输入用户名和密码登 ...

  9. Linux下 vim代码编译器的使用

    首先在命令行模式下输入代码: vim ok.c 创建c文件 如果发现vim没有被安装的话,输入以下代码对vim进行安装: sudo apt install vim 安装完毕之后再输入第一行代码,之后进 ...

  10. Xamarin学习(一)---- 环境准备

      前言: 摸索学习Xamarin的应用,以此博客跟进学习进度. 介绍:  Xamarin 提供了用于移动设备.平板电脑和桌面应用程序的跨平台开发解决方案.Xamarin 产品依赖于 Apple 和 ...