gpt4 book ai didi

c# backgroundWorker 不引发 ProgressChanged 或 RunWorkerCompleted 事件

转载 作者:太空狗 更新时间:2023-10-29 22:14:47 25 4
gpt4 key购买 nike

使用 C# .NET 3.5。

似乎我不是唯一一个,因为搜索似乎提出了很多类似的问题,但是通过阅读它们我似乎仍然缺少解决方案。

我通过在我的 UI 上单击按钮来引发事件,然后应该启动 backgroundWorker 来完成一些耗时的工作 - 在这种情况下,我希望它从表单中收集信息并 a) 写入到 xml 文件以及 b) 将信息插入远程数据库。

我相信这正是 backgroundWorker 的设计和意图。

这是事件引发代码。

private void btnFinish_Click(object sender, EventArgs e)
{
clkFinish.setInstant();
curAct.setTimeFinish(DateTime.Now);
btnStart.Enabled = true;
bgwDataWorker.RunWorkerAsync();
for (int i = 0; i < 20; i++)
{
Console.WriteLine("Thread a: " + i);
Thread.Sleep(100);
if (i == (20 - 1))
{
Console.WriteLine("Finished");
}
}

}

如您所见,我有一些代码用作后台工作代码的平衡,在此处:

private void bgwDataWorker_DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine("Running in a different thread now");
int count = 0;
for (int i = 0; i < 21; i++)
{
Console.WriteLine("Thread b: " + i);
Thread.Sleep(100);
(sender as BackgroundWorker).ReportProgress(5 * i, null);
if (i == (21 - 1))
{
count = i;
}
}
e.Result = count;
}

到目前为止,一切似乎都在进行中。

我的问题是,当 DoWork 方法中的代码完成时,什么也没有发生。以下是 ProgressChanged 和 RunWorkerComplete 方法。

private void bgwDataWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine(e.ProgressPercentage);
}

private void bgwDataWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine("Result is " + e.Result.ToString());

}

这让我感到困惑。

我试过运行 examples from MSDN我遇到了同样的问题。出于某种原因,RunWorkerCompleted 和 ReportProgress 事件根本没有被引发,我不明白为什么。

感谢阅读。

艾伦

最佳答案

我遇到了同样的问题,我刚刚找到了答案。

在 backgroundworker 的属性中,确保 ProgressChanged 和 RunWorkerCompleted 列出了它们函数的名称(我的分别称为“backgroundWorker1_ProgressChanged”和“backgroundWorker1_RunWorkerCompleted”)。

关于c# backgroundWorker 不引发 ProgressChanged 或 RunWorkerCompleted 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6108485/

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