1. 新建一個表單,并隱藏標題欄,拖拽一個ProgressBar進度條控制元件

2.后臺代碼實作
1)定義委托,用于更新前端UI
delegate void AsynUpdateUI(int step);
2)在表單加載事件里面注冊委托事件,啟動執行緒
private void FormClient_Load(object sender, EventArgs e)
{
int taskCount = 100;
this.pgbWrite.Maximum = taskCount;
this.pgbWrite.Value = https://www.cnblogs.com/lihaishu/archive/2021/10/09/0;
DataWrite dataWrite = new DataWrite();//實體化一個寫入資料的類
dataWrite.UpdateUIDelegate += UpdataUIStatus;//系結更新任務狀態的委托
dataWrite.TaskCallBack += Accomplish;//系結完成任務要呼叫的委托
Thread thread = new Thread(new ParameterizedThreadStart(dataWrite.Write));
thread.IsBackground = true;
thread.Start(taskCount);
}
3)創建一個DataWrite類,用于寫入資料
internal class DataWrite
{
public delegate void UpdateUI(int step);//宣告一個更新主執行緒的委托
public UpdateUI UpdateUIDelegate;
public delegate void AccomplishTask();//宣告一個在完成任務時通知主執行緒的委托
public AccomplishTask TaskCallBack;
public void Write(object lineCount)
{
for (int i = 0; i < (int)lineCount; i++)
{
//撰寫要完成事情的代碼,目前先用等待代替
Thread.Sleep(50); //等待一下,也可以去掉
//寫入一條資料,呼叫更新主執行緒ui狀態的委托
UpdateUIDelegate(1);
}
//任務完成時通知主執行緒作出相應的處理
TaskCallBack();
//將更新包資訊寫入到客戶端檔案配置中
Thread.Sleep(1000);
Application.Exit();
}
}
4)定義更新前端UI的方法
private void UpdataUIStatus(int step)
{
if (InvokeRequired)
{
this.Invoke(new AsynUpdateUI(delegate (int s)
{
this.pgbWrite.Value += s;
this.lblProcess.Text = "檢測到最新程式,正在更新請稍候("+this.pgbWrite.Value.ToString() + "%)...";
}), step);
}
else
{
this.pgbWrite.Value += step;
this.lblProcess.Text = "檢測到最新程式,正在更新請稍候(" + this.pgbWrite.Value.ToString() + "%)...";
}
}
5)定義完成任務后要呼叫的方法
private void Accomplish()
{
//還可以進行其他的一些完任務完成之后的邏輯處理
if (InvokeRequired)
{
this.Invoke(new AsynUpdateUI(delegate (int s)
{
lblProcess.Text = "更新完成,即將啟動客戶端...";
}), 0);
}
else {
lblProcess.Text = "更新完成,即將啟動客戶端...";
}
}
以上步驟就以異步方式實作了一個Winform進度條的功能,下面是具體效果截圖:


轉載請註明出處,本文鏈接:https://www.uj5u.com/net/307088.html
標籤:.NET技术
