c# - 即使存在异常,访问参数也会传递给BackgroundWorker?

标签 c# backgroundworker

简短版本

如果引发异常,如何访问在 RunWorkerCompleted 事件中传递给 BackgroundWorker 的参数?

加长版

我在我的应用程序中使用 BackgroundWorker 组件。在应用程序启动时,我查询数据库以获取未发送的消息的列表。然后使用 GSM 调制解调器(在后台工作人员内部)我一条一条地发送消息。

现在,一旦我决定发送消息,我就会将其添加到名为 CurrentlyHandledMessages 的列表中。这是为了确保 2 个调制解调器不会发送相同的消息。

现在,我将消息的 ID 作为参数传递给 BackgroundWorker,它发送消息,并且引发 RunWorkerCompleted 事件,然后我从当前处理的消息列表。我将结果作为元组传递。

e.Result = new Tuple<int, String>(idToHandle, response);

如果没有异常的话,这工作正常。

但是,如果引发异常,我看不到如何将参数传递给 BackgroundWorker。因为在 RunWorkerCompleted 事件中,无论如何我都想删除 id。

最佳答案

没有内置方法来获取传递的参数(在本例中为 ID)。您需要自己传递它。我建议始终简单地传递它,而不管是否有异常,因此想象一下在 DoWork 处理程序中类似这样的事情:

string response;

try
{
    ...

    response = "something";
}
catch (Exception ex)
{
    response = e.ToString();
}
finally
{
    e.Result = new Tuple<int, string>((int)e.Argument, response);
}

现在,无论结果如何,您都会将该 ID 获取到 RunWorkerCompleted 处理程序中。

关于c# - 即使存在异常,访问参数也会传递给BackgroundWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15939821/

相关文章:

c# - WPF:为 ResourceDictionary 命名

c# - 如何使用 Utf8JsonWriter 编写字符串数组?

c# - Windows Media Player中的Wav文件使使用C#有时无法正确播放的项目排队

c# - 关闭应用程序是否会停止所有事件的 BackgroundWorker?

c# - C# 6 中(自动)属性初始化语法之间的区别

c# - LINQ C# - 组合多个组

c# - 如何判断两个相似的乐队名称是否代表同一个乐队?

处理 "heavy"数据时的 WinForms UI 响应能力

c# - 应用程序停用时如何关闭 BackgroundWorker 线程?

c# - 线程调试窗口中没有显示任何线程