目錄
一、創(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 編輯過