1

私はこのようなコードを持っています。

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);
            }
        }
    }

私を助けてくれませんか?イベントのため機能していません。

4

1 に答える 1

1

イベントはDocumentCompleted、メイン アプリケーションとは別のスレッドで発生します。これは、デバッグ中に Visual Studio の [スレッド] ウィンドウを開くと確認できます。あるスレッドから別のスレッドに例外をスローすることはできません。

WPF を使用しているか、Windows フォームを使用しているかはわかりませんが、後者を想定すると、例外をスローするのではなく、フォームまたはコントロールでInvokeメソッドを使用して UI を更新するか、メッセージ ボックスを開く必要があります。

于 2013-10-10T12:36:56.893 に答える