简短版本
如果引发异常,如何访问在 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/