如何处理事件中的异常?

时间:2015-06-02 04:26:25

标签: c# vb.net

所以 - 我有这个我正在使用的外部组件。它会触发事件DataReceived。然后我做了一些数据库操作,这些操作可能由于数据问题或代码中的一些错误而失败。如果我能够起泡,那就太好了。 GUI中的例外。在我的情况下,由于程序集的工作方式,我需要阻止调用GUI。我不确定这是不是一个好主意,但现在根据外部代码的工作原理,这是唯一想到的事情。

程序集假定如果回调(事件)安全返回,则数据处理成功 - 可能不是这种情况。当然,我必须以某种方式处理错误,但这意味着另一方的服务器总是假设数据处理正确。

我的问题是:

  • 我可以将异常引入 GUI吗?如果是这样,怎么样?
  • 如何在事件中处理异常,以便程序集不会认为我处理了数据?我是否需要某种阻塞调用/异常进入 GUI? (这有可能吗?)
  • 旁注:那个装配以某种方式破坏 吗?为什么它会根据回调是否自动假设一切正常?

1 个答案:

答案 0 :(得分:0)

我不认为这是被设计破坏。如果您收到该活动,您将收到消息来源中发生变化的通知。现在,您应该只执行从源获取所需信息所需的操作,并执行与源分离的任何进一步处理。为此,我将在事件处理程序中简单地获取数据(可能来自源;可能来自事件args)并将它们放入ConcurrentQueue。在我的类中,另一个任务正在运行,使用BlockingCollection检索此队列中的元素来处理它们。如果有任何失败,只需将Invoke()调用到gui线程并告知用户发生了什么。

啊,而不是使用ConcurrentQueue的另一种方法是使用Rx。有了它,您可以subscribe to an event使用ObserveOn()在不同的线程上观察它,这将导致几乎相同(在这种情况下)但使用更多LINQish语法。