11

このコードの「非静的フィールド、メソッド、またはプロパティ 'System.Windows.Threading.Dispatcher.BeginInvoke(System.Action)' にはオブジェクト参照が必要です」というメッセージが表示されます。

private void ResponseCompleted(IAsyncResult result)
    {
        HttpWebRequest request = result.AsyncState as HttpWebRequest;
        HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse;

        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            Dispatcher.BeginInvoke( () => {
                try
                {
                    XDocument resultsXml = XDocument.Load(sr);
                    QueryCompleted(new QueryCompletedEventArgs(resultsXml));
                }
                catch (XmlException e)
                {
                    XDocument errorXml = new XDocument(new XElement("error", e.Message));
                    QueryCompleted(new QueryCompletedEventArgs(errorXml));
                }
            });

        }
    }
}
4

2 に答える 2

22

この質問に対する最後の回答が投稿されてから、状況は少し変わりました。 System.Windows.Threading.Dispatcher.BeginInvoke今でしょDeployment.Current.Dispatcher.BeginInvoke

于 2012-01-25T07:40:45.870 に答える
18

Dispatcherこのエラーは、インスタンス メソッドであるため、呼び出すにはのインスタンスが必要であることを示していますBeginInvoke。そのインスタンスを取得する場所は、通話をディスパッチする場所によって異なります。

おそらく、静的プロパティDispatcher.CurrentDispatcherを使用して現在のスレッドのディスパッチャーのインスタンスを取得し、そのインスタンスを呼び出すBeginInvokeことができます。それか、呼び出したい特定のスレッドからメソッドへのディスパッチャーインスタンスを何らかの方法で取得します。

于 2010-04-08T00:56:37.890 に答える