c#实时显示任务进度条
界面大致这样。在点击开始后,有一个长任务要执行,执行过程中需要实时显示进度条和label1显示百分比。我希望的是进度条的进度能根据我以下这个for循环来更新,因为这个fo...
界面大致这样。
在点击开始后,有一个长任务要执行,执行过程中需要实时显示进度条和label1显示百分比。
我希望的是进度条的进度能根据我以下这个for循环来更新,因为这个for循环每次要执行很长的时间,所以要没循环一次,进度条值+1。
也就是progressBar的maxnum=n;
int n=100;
for(int i=0;i<n;i++)
{
……
//在这过程中需要执行很久
……
}
线程相关的没学好,求各位给下代码,万分感谢 展开
在点击开始后,有一个长任务要执行,执行过程中需要实时显示进度条和label1显示百分比。
我希望的是进度条的进度能根据我以下这个for循环来更新,因为这个for循环每次要执行很长的时间,所以要没循环一次,进度条值+1。
也就是progressBar的maxnum=n;
int n=100;
for(int i=0;i<n;i++)
{
……
//在这过程中需要执行很久
……
}
线程相关的没学好,求各位给下代码,万分感谢 展开
展开全部
public partial class MainWindow : Window
{
// 后台对象
private BackgroundWorker m_BackgroundWorker;
public MainWindow()
{
InitializeComponent();
// 实例化后台对象
m_BackgroundWorker = new BackgroundWorker();
// 设置可以通告进度
m_BackgroundWorker.WorkerReportsProgress = true;
// 设置可以取消
m_BackgroundWorker.WorkerSupportsCancellation = true;
m_BackgroundWorker.DoWork += new DoWorkEventHandler(DoWork);
m_BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(UpdateProgress);
m_BackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork);
m_BackgroundWorker.RunWorkerAsync(this);
}
void DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
MainWindow win = e.Argument as MainWindow;
int i = 0;
while ( i <= 100 )
{
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}
bw.ReportProgress(i++);
//用Sleep()模拟一个长时间的处理
//用你的处理代替下面的Thread.Sleep(1000)
Thread.Sleep(1000);
}
}
void UpdateProgress(object sender, ProgressChangedEventArgs e)
{
int progress = e.ProgressPercentage;
label1.Content = string.Format("{0}",progress);
}
void CompletedWork(object sender, RunWorkerCompletedEventArgs e)
{
if ( e.Error != null)
{
MessageBox.Show("Error");
}
else if (e.Cancelled)
{
MessageBox.Show("Canceled");
}
else
{
MessageBox.Show("Completed");
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
m_BackgroundWorker.CancelAsync();
}
}
追问
可以加点注释吗,因为我还不知道在哪里调用。点击“开始”,不仅进度条跟进,我那个长进程也跟着开始了,就在button1_Click()里面
追答
这样改:
public MainWindow()
{
// 保留其他语句,
// 注释掉或删掉最后一行语句
//m_BackgroundWorker.RunWorkerAsync(this);
}
void DoWork(object sender, DoWorkEventArgs e)
{
for( int i=0; i<100; i++)
{
//你需要指向很久的操作语句放在这里
// ……
//修改进程条
bw.ReportProgress(i);
}
}
private void button1_Click(object sender, EventArgs e)
{
//启动长任务处理
bkgWorker.RunWorkerAsync(this);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询