C#窗体程序,程序运行10个小时关闭程序,时间计算方式按分钟来计算的完整代码
时间: 2024-09-21 08:05:59 浏览: 42
C#窗体程序ATM.zip
在C# Windows Forms 应用中,如果你想让程序持续运行10个小时,并每分钟更新剩余时间,你可以创建一个后台线程和定时器来实现这个功能。以下是一个简单的示例代码:
```csharp
using System;
using System.Windows.Forms;
using System.Timers;
public partial class MainForm : Form
{
private Timer timeTimer;
private bool isRunning = true;
public MainForm()
{
InitializeComponent();
UpdateInitialTime();
InitializeTimer();
}
private void InitializeTimer()
{
timeTimer = new Timer();
timeTimer.Interval = 1000; // 每秒更新
timeTimer.Elapsed += OnTimeTick;
}
private void OnTimeTick(object sender, ElapsedEventArgs e)
{
if (!isRunning) return; // 如果程序已关闭则退出
// 获取当前时间和总运行时间
DateTime currentTime = DateTime.Now;
TimeSpan totalDuration = TimeSpan.FromHours(10);
TimeSpan elapsedTime = currentTime - startTime;
// 计算剩余分钟和秒
int minutesRemaining = totalDuration.Minutes - elapsedTime.Minutes;
int secondsRemaining = totalDuration.Seconds - elapsedTime.Seconds;
// 防止负值
if (minutesRemaining < 0) minutesRemaining = 0;
if (secondsRemaining < 0) secondsRemaining = 0;
// 更新UI
Invoke((MethodInvoker)UpdateDisplay, minutesRemaining, secondsRemaining); // 异步更新UI线程
}
private void UpdateDisplay(int minutes, int seconds)
{
lblRemainingTime.Text = $"剩余时间:{minutes}分 {seconds}秒";
}
private void btnStart_Click(object sender, EventArgs e)
{
isRunning = true;
startTime = DateTime.Now;
timeTimer.Start();
}
private void btnStop_Click(object sender, EventArgs e)
{
isRunning = false;
timeTimer.Stop();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
btnStop.PerformClick(); // 如果用户手动关闭,先停止计时
}
}
private void UpdateInitialTime() // 初始化UI显示总时间
{
lblRemainingTime.Text = $"剩余时间:10:00";
}
private DateTime startTime;
}
// 在设计视图中添加一个Label用于显示剩余时间,例如lblRemainingTime
```
在这个例子中,我们有一个`btnStart`按钮开始计时,`btnStop`按钮停止计时。当用户尝试关闭窗口时,我们会先停止计时。`UpdateDisplay`方法会在UI线程安全地更新剩余时间。
请注意,如果你的应用需要在长时间运行时保持响应用户操作,可能还需要考虑使用异步处理或者其他方法来避免UI阻塞。
阅读全文