2

問題は次のとおりです。最初のメッセージボックス行を削除すると、プログラムが実行されず、ifステートメント行に「呼び出しのターゲットによって例外がスローされました」がスローされます。ただし、メッセージボックスをそのままにしておくと、正常に動作します。誰かが私にこれが起こっている理由とそれを修正するために私ができることを説明できますか?ちなみに、私はWPFにかなり慣れていないので、助けていただければ幸いです。

public BrowserMode() {

       InitializeComponent();

       MessageBox.Show("Entering Browser Mode");
       if (webBrowser1.Source.Scheme == "http")
       {
           //cancel navigation
           //this.NavigationService.Navigating += new NavigatingCancelEventHandler(Cancel_Navigation);

           qd = new QuestionData();

           // code where stuff happens
           var url = webBrowser1.Source;
           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

           // from h.RequestUri = "webcam://submit?question_id=45"
           var parseUrl = request.RequestUri; //the uri that responded to the request.
           MessageBox.Show("The requested URI is: " + parseUrl);
4

1 に答える 1

2

この種の作業はコンストラクターには適していないため、WebBrowserが完全にロードされるまで移動する必要があります。2つのオプションがあります。

  1. そこでフックControl.Loadedしてこの動作を実行します。

    public BrowserMode()
    {
        InitializeComponent();
    
        this.Loaded += BroswerMode_Loaded;
    }
    
    void BrowserMode_Loaded(object sender, EventArgs e)
    {
        if (webBrowser1.Source != null
         && webBrowser1.Source.Scheme == "http")
        {
            qd = new QuestionData();
            // ...
        }
    }
    
  2. そこでフックWebBrowser.Navigatingしてこの動作を実行します。

    public BrowserMode()
    {
        InitializeComponent();
    
        this.webBrowser1.Navigating += WebBrowser_Navigating;
    }    
    
    void WebBrowser_Navigating(object sender, NavigatingCancelEventArgs e)
    {
        if (e.Uri.Scheme == "http")
        {
            qd = new QuestionData();
            // ...
        }
    }
    
于 2012-09-18T21:27:42.323 に答える