gpt4 book ai didi

c# - 后台 worker - 使用字符串数组报告进度

转载 作者:太空狗 更新时间:2023-10-29 17:31:02 24 4
gpt4 key购买 nike

我需要在每个循环中从我的 backgroundworker 返回多个 STRING 值,所以我尝试使用 ReportProgress 第二个参数作为字符串数组。代码示例:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string[] workerResult = new string[2];
for (int i=0; i<someNumber; i++)
{
//do some heavy calculating
workerResult[0] = "this string";
workerResult[1] = "some other string";
backgroundWorker1.ReportProgress(i, workerResult) // also tried workerResult[] and [2]
}
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
string[] results = (string[])e.UserState;

MessageBox.Show(results[0]); // line of error
MessageBox.Show(results[1]); // line of error
}

它可以编译,但在运行时,当我尝试访问 Userstate 返回的字符串时,我收到错误消息:“对象引用未设置为对象的实例。”

对我来说,将数组参数传递给 ProgressChanged 委托(delegate)时,或者在 ProgressChanged 方法中尝试设置结果数组值时,似乎出了点问题。

最佳答案

您的代码片段无法重现问题。一个标准的错误是调用 ReportProgress() 然后继续修改对象。事件处理程序运行需要一段时间,它将看到修改后的对象,而不是原始对象。您可以通过简单地创建一个新对象来避免这种情况,以便事件处理程序始终与原始对象一起工作。像这样:

        //do some heavy calculating
for (int i = 0; i < 2; ++i) {
string[] workerResult = new string[2];
workerResult[0] = "this string";
workerResult[1] = "some other string";
backgroundWorker1.ReportProgress(i, workerResult);
}

注意数组创建语句是如何在循环内移动的。

关于c# - 后台 worker - 使用字符串数组报告进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5459205/

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