aaynctask控制多个下载进度_C# 多线程方法 控制两个进度条
展開全部
using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Linq;
using?System.Text;
using?System.Windows.Forms;
using?System.Threading;
namespace?Demo0004
{
public?partial?class?Form1?:?Form
{
public?Form1()
{
InitializeComponent();
}
//線程開始的時(shí)候調(diào)用的委32313133353236313431303231363533e78988e69d8331333337613766托
private?delegate?void?maxValueDelegate(int?maxValue);
//線程執(zhí)行中調(diào)用的委托
private?delegate?void?nowValueDelegate(int?nowValue);
private?void?button1_Click(object?sender,?EventArgs?e)
{
ThreadMethod?method?=?new?ThreadMethod();
//先訂閱一下事件
method.threadStartEvent?+=?new?EventHandler(method_threadStartEvent);
method.threadEvent?+=?new?EventHandler(method_threadEvent);
method.threadEndEvent?+=?new?EventHandler(method_threadEndEvent);
Thread?thread?=?new?Thread(new?ThreadStart(method.runMethod));
thread.Start();
}
///?
///?線程開始事件,設(shè)置進(jìn)度條最大值
///?但是我不能直接操作進(jìn)度條,需要一個(gè)委托來(lái)替我完成
///?
///?ThreadMethod函數(shù)中傳過(guò)來(lái)的最大值
///?
void?method_threadStartEvent(object?sender,?EventArgs?e)
{
int?maxValue?=?Convert.ToInt32(sender);
maxValueDelegate?max?=?new?maxValueDelegate(setMax);
this.Invoke(max,?maxValue);
}
///?
///?線程執(zhí)行中的事件,設(shè)置進(jìn)度條當(dāng)前進(jìn)度
///?但是我不能直接操作進(jìn)度條,需要一個(gè)委托來(lái)替我完成
///?
///?ThreadMethod函數(shù)中傳過(guò)來(lái)的當(dāng)前值
///?
void?method_threadEvent(object?sender,?EventArgs?e)
{
int?nowValue?=?Convert.ToInt32(sender);
nowValueDelegate?now?=?new?nowValueDelegate(setNow);
this.Invoke(now,?nowValue);
}
///?
///?線程完成事件
///?
///?
///?
void?method_threadEndEvent(object?sender,?EventArgs?e)
{
MessageBox.Show("執(zhí)行已經(jīng)完成!");
}
///?
///?我被委托調(diào)用,專門設(shè)置進(jìn)度條最大值的
///?
///?
private?void?setMax(int?maxValue)
{
this.progressBar1.Maximum?=?maxValue;
}
///?
///?我被委托調(diào)用,專門設(shè)置進(jìn)度條當(dāng)前值的
///?
///?
private?void?setNow(int?nowValue)
{
this.progressBar1.Value?=?nowValue;
}
}
public?class?ThreadMethod
{
///?
///?線程開始事件
///?
public?event?EventHandler?threadStartEvent;
///?
///?線程執(zhí)行時(shí)事件
///?
public?event?EventHandler?threadEvent;
///?
///?線程結(jié)束事件
///?
public?event?EventHandler?threadEndEvent;
public?void?runMethod()
{
int?count?=?100;??????//執(zhí)行多少次
threadStartEvent.Invoke(count,?new?EventArgs());//通知主界面,我開始了,count用來(lái)設(shè)置進(jìn)度條的最大值
for?(int?i?=?0;?i?
{
Thread.Sleep(100);//休息100毫秒,模擬執(zhí)行大數(shù)據(jù)量操作
threadEvent.Invoke(i,?new?EventArgs());//通知主界面我正在執(zhí)行,i表示進(jìn)度條當(dāng)前進(jìn)度
}
threadEndEvent.Invoke(new?object(),?new?EventArgs());//通知主界面我已經(jīng)完成了
}
}
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的aaynctask控制多个下载进度_C# 多线程方法 控制两个进度条的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蒸发器分段设计matlab程序_制冷系统
- 下一篇: 唱歌如何保持高位置_歌唱中如何找到声音的