如何处理来自外部的对象事件内发生的异常?

时间:2013-10-10 10:53:37

标签: c# exception-handling

我有一段这样的代码。

class Facebook
    {
        WebBrowser wb = new WebBrowser();
        public bool isDone = false;
        public Facebook()
        {
            wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
        }
        public void Navidate(string URL = "http://www.facebook.com")
        {
            wb.Navigate(URL);
        }
        public void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

            WebBrowser wb = sender as WebBrowser;
            if (wb != null && wb.StatusText.Contains("404"))
            {
                // i want to throw this exception to outside how ?
                throw new ServerNotFound("Error 404");
            }
            else
            {
                isDone = true;
            }
        }
    }
    public class ServerNotFound : Exception
    {
        public ServerNotFound(string Message)
            : base(Message)
        {

        }

在这里,您可以看到它可以引发异常的Web浏览器事件 我想像这样处理这个异常。

 static class Program
    {

        [STAThread]
        static void Main()
        {
            try
            {
                Facebook fb = new Facebook();
                fb.Navidate();
                do
                {
                    Application.DoEvents();
                }
                while (!fb.isDone);
            }

            catch (ServerNotFound ex)
            {
                // i want to handle that exception here ?
                MessageBox.Show(ex.Message);
            }
        }
    }
你可以帮帮我吗?由于事件,它无法正常工作。

1 个答案:

答案 0 :(得分:1)

DocumentCompleted事件在与主应用程序不同的线程中触发。如果在调试时打开Visual Studio的“线程”窗口,则可以看到此信息。您不能将异常从一个线程抛出到另一个线程。

如果您使用的是WPF或Windows窗体,则不能说,但假设后者,您应该使用表单或控件上的Invoke方法更新UI或打开消息框,而不是试图抛出异常。