gpt4 book ai didi

c# - backgroundworker中的进度条和后台运行方法

转载 作者:太空宇宙 更新时间:2023-11-03 10:56:08 24 4
gpt4 key购买 nike

我在表单中创建了一个后台工作进程..

 BackgroundWorker bw = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};

此外,我在表单中有一个进度条控件(进度条最小值和最大值分别为 1 和 100)。

在我的按钮中点击,

点击事件将触发应该在后台并行运行的实际方法调用,开始显示进度条步骤....

if (bw.IsBusy)
{
return;
}

bw.DoWork += (bwSender, bwArg) =>
{
MethodCall1(); - Does some database insertions..
MethodCall2(); - Does some database select...
}

bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);

bw.RunWorkerCompleted += (bwSender, bwArg) =>
{

bw.Dispose();
};

bw.RunWorkerAsync();

用于显示进度的进度条...

void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}

我面临的问题是,进度条没有步进,它静止不动并且没有进度条的进度。

我也尝试在我的实际方法中插入 bw.ReportProgress(integervalue),但是,它没有帮助。

如何让后台工作线程处理方法调用并并行显示进度条的进度,方法调用完成后,我想结束进度条步骤。

最佳答案

正如评论中的其他人所述,您应该将事件的连接移动到表单构造函数或初始化方法。如果您在每次单击按钮时将它们添加到 BackgroundWorker,那么这些方法将在第二次单击时执行两次,在第三次单击时执行三次,依此类推。

尝试在 DoWork 代码中的方法调用之后立即调用 ReportProgress。正如 Hans 上面所说,除非您非常清楚方法调用彼此之间需要多长时间,否则这并不是真正准确的进度表示。

对于Dispose,BackgroundWorker继承自Component,Component实现了IDisposable。但是,BackgroundWorker 不会重写基本实现来实际处理任何东西,因此调用它只是将它从组件集合中删除。它不需要显式调用。

尝试这样的事情:

public partial class Form1 : Form
{
BackgroundWorker bw = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};

public Form1()
{
InitializeComponent();

bw.DoWork += (bwSender, bwArg) =>
{
//MethodCall1(); - Does some database insertions..
bw.ReportProgress(50);
//MethodCall2(); - Does some database select...
bw.ReportProgress(100);
};

bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);

bw.RunWorkerCompleted += (bwSender, bwArg) =>
{

};
}

private void button1_Click(object sender, EventArgs e)
{
if (bw.IsBusy)
{
return;
}

bw.RunWorkerAsync();
}

void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
}

关于c# - backgroundworker中的进度条和后台运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19438878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com