目錄
一、創(chuàng)作背景
二、UI界面介紹
1、文本輸入框有:計數(shù)開始值、技術(shù)步進值、計數(shù)停止值。
2、label1用于程序運行過程中顯示文字信息。
3、進度條用于顯示進度。
4、點擊開始按鍵程序開始保存數(shù)據(jù)。
5、點擊停止按鍵程序保存完當(dāng)前循環(huán)中的數(shù)據(jù)并停止運行。
三、程序功能描述
四、源程序
五、實際效果演示
一、創(chuàng)作背景
之前的文章中分別不覆蓋寫入csv文件和進度條,本文稍加修改把之前的功能融入程序中,能實現(xiàn)在for循環(huán)保存數(shù)據(jù)的過程中實現(xiàn)中途即時停止循環(huán)寫入,且保證當(dāng)前進度下的數(shù)據(jù)能完整寫入csv文件中保存。
二、UI界面介紹
1、文本輸入框有:計數(shù)開始值、技術(shù)步進值、計數(shù)停止值。
2、label1用于程序運行過程中顯示文字信息。
3、進度條用于顯示進度。
4、點擊開始按鍵程序開始保存數(shù)據(jù)。
5、點擊停止按鍵程序保存完當(dāng)前循環(huán)中的數(shù)據(jù)并停止運行。
三、程序功能描述
1、該程序用于實現(xiàn)每隔一秒從計數(shù)開始值以計數(shù)步進值一直累加到計數(shù)停止值,同時顯示進度并保存系統(tǒng)當(dāng)前時間、計數(shù)值和計數(shù)進度到生成的csv文件中。
四、源程序
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;
namespace writedata_progressbar{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }
bool flag = false;
private async void buttonStart_Click(object sender, EventArgs e) { double CountStart = Convert.ToDouble(textBoxCountStart.Text); double CountStep = Convert.ToDouble(textBoxCountStep.Text); double CountStop = Convert.ToDouble(textBoxCountStop.Text);
int num = Convert.ToInt32(Math.Abs(CountStop - CountStart) / CountStep) + 1; double[] lists = new double[num]; for (int i = 0; i < num; i++) { if (CountStop > CountStart) { lists[i] = CountStart + i * CountStep; } else { lists[i] = CountStart - i * CountStep; } }
string FileNamePath = @"D:\C# Projects\writedata_progressbar\writedata_progressbar.csv"; progressBar1.Maximum = num;
await Task.Run(() => {
if (label1.InvokeRequired) { while (!label1.IsHandleCreated) { if (label1.Disposing || label1.IsDisposed) return; } Invoke(new Action(() => { label1.Text = "開始計數(shù)"; })); } else { label1.Text = "開始計數(shù)"; }
if (buttonStart.InvokeRequired) { while (!buttonStart.IsHandleCreated) { if (buttonStart.Disposing || buttonStart.IsDisposed) return; } Invoke(new Action(() => { buttonStart.Enabled = false; })); } else { buttonStart.Enabled = false; }
});
await Task.Run(async () => { string data = string.Empty; for (int i = 0; i < lists.Count(); i++) { double bar1 = Math.Round((Convert.ToDouble(i + 1) / num) * 100, 3); if (label1.InvokeRequired) { while (!label1.IsHandleCreated) { if (label1.Disposing || label1.IsDisposed) return; } Invoke(new Action(() => { label1.Text = "當(dāng)前時間:" + DateTime.Now.ToString() + "當(dāng)前計數(shù)值:" + Convert.ToString(lists[i]) + ";計數(shù)進度為:" + Convert.ToString(bar1) + "%"; })); } else { label1.Text = "當(dāng)前時間:"+DateTime.Now.ToString()+"當(dāng)前計數(shù)值:" + Convert.ToString(lists[i]) + ";計數(shù)進度為:" + Convert.ToString(bar1) + "%"; }
if (progressBar1.InvokeRequired) { while (!progressBar1.IsHandleCreated) { if (label1.Disposing || label1.IsDisposed) return; } Invoke(new Action(() => { progressBar1.Value = Convert.ToInt32(i + 1); })); } else { progressBar1.Value = Convert.ToInt32(i + 1); } Thread.Sleep(1000); data = DateTime.Now.ToString() + ',' + "當(dāng)前計數(shù)值:" + Convert.ToString(lists[i]) + ",計數(shù)進度為:" + Convert.ToString(bar1) + "%"; if (!File.Exists(FileNamePath)) { try { FileStream fileStream = new FileStream(FileNamePath, FileMode.Create, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8); streamWriter.WriteLine(Convert.ToString(data)); streamWriter.Close(); fileStream.Close(); } catch {
} } else { try { FileStream fileStream = new FileStream(FileNamePath, FileMode.Append, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8); streamWriter.WriteLine(Convert.ToString(data)); streamWriter.Close(); fileStream.Close(); } catch {
} }
if (flag == true) { flag = false; break; } }
});
await Task.Run(() => { if (buttonStart.InvokeRequired) { while (!buttonStart.IsHandleCreated) { if (buttonStart.Disposing || buttonStart.IsDisposed) return; } Invoke(new Action(() => { buttonStart.Enabled = true; })); } else {
buttonStart.Enabled = true; } }); }
private async void buttonpause_Click(object sender, EventArgs e) { await Task.Run(() => { if (buttonstop.InvokeRequired) { while (!buttonstop.IsHandleCreated) { if (buttonstop.Disposing || buttonstop.IsDisposed) return; } Invoke(new Action(() => { buttonstop.Enabled = false; })); } else { buttonstop.Enabled = false; } });
await Task.Run(() => { if (flag == false) { flag = true; } else { flag = false; } });
await Task.Run(() => { if (buttonstop.InvokeRequired) { while (!buttonstop.IsHandleCreated) { if (buttonstop.Disposing || buttonstop.IsDisposed) return; } Invoke(new Action(() => { buttonstop.Enabled = true; })); } else {
buttonstop.Enabled = true; } }); } }}
實際運行效果關(guān)注點擊鏈接跳轉(zhuǎn)到嗶哩嗶哩網(wǎng)頁:
https://www.bilibili.com/video/BV14G411e7e1/?
閱讀原文:原文鏈接
該文章在 2025/10/20 12:16:37 編輯過