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 回答