- 新建项目名为 记录时长
- MainWindow.xmal代码:
<Window x:Class="记录时长.MainWindow"
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:记录时长"
mc:Ignorable="d"
Title="MainWindow" Height="320.93" Width="1115.278">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="10"/>
<StackPanel Orientation="Horizontal" Grid.Row="1" Margin="10">
<Label Content="Time:"/>
<TextBox Name="txtTime" Width="100" Margin="5" IsEnabled="False"/>
<TextBox x:Name="txtTime2" Width="100" Margin="5" IsEnabled="False"/>
</StackPanel>
</Grid>
</Window>
- MainWindow.xmal.cs代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
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.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using 记录时长;
namespace 记录时长
{
public partial class MainWindow : Window
{
private bool desiredState = false;
private bool timing = false;
public DateTime startTime;
public TimeSpan elapsedTime = TimeSpan.Zero;
private bool timing2 = false;
private DateTime startTime2;
private TimeSpan elapsedTime2 = TimeSpan.Zero;
private DispatcherTimer statusCheckTimer;
private Timer timingTimer;
private Timer timingTimer2;
public MainWindow()
{
InitializeComponent();
timingTimer = new Timer();
timingTimer.Elapsed += TimingTimer_Elapsed;
timingTimer.Interval = 1000;
timingTimer2 = new Timer();
timingTimer2.Elapsed += TimingTimer_Elapsed2;
timingTimer2.Interval = 1000;
statusCheckTimer = new DispatcherTimer();
statusCheckTimer.Tick += StatusCheckTimer_Tick;
statusCheckTimer.Interval = TimeSpan.FromSeconds(1);
statusCheckTimer.Start();
}
private void StatusCheckTimer_Tick(object sender, EventArgs e)
{
Random random = new Random();
var value = random.Next(1, 10);
if (value==1||value==2)
{
if (!timing)
{
timing = true;
startTime = DateTime.Now;
txtTime.IsEnabled = true;
timingTimer.Start();
}
}
else
{
if (timing)
{
timing = false;
elapsedTime += DateTime.Now - startTime;
txtTime.IsEnabled = false;
timingTimer.Stop();
}
}
if (value == 6 || value == 7)
{
if (!timing2)
{
timing2 = true;
startTime2 = DateTime.Now;
txtTime2.IsEnabled = true;
timingTimer2.Start();
}
}
else
{
if (timing2)
{
timing2 = false;
elapsedTime2 += DateTime.Now - startTime2;
txtTime2.IsEnabled = false;
timingTimer2.Stop();
}
}
}
private void TimingTimer_Elapsed(object sender, ElapsedEventArgs e)
{
Dispatcher.Invoke(() => {
txtTime.Text = (elapsedTime + (DateTime.Now - startTime)).ToString(@"hh\:mm\:ss");
});
}
private void TimingTimer_Elapsed2(object sender, ElapsedEventArgs e)
{
Dispatcher.Invoke(() => {
txtTime2.Text = (elapsedTime2 + (DateTime.Now - startTime2)).ToString(@"hh\:mm\:ss");
});
}
}
}