Dispatcher.BeginInvoke问题

我得到“此代码的非静态字段,方法或属性’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)); } }); } } } 

该错误表明您需要一个Dispatcher实例来调用BeginInvoke因为它是一个实例方法。 获得该实例的位置取决于您要拨打电话的位置。

也许您可以尝试使用静态属性Dispatcher.CurrentDispatcher来获取当前线程的调度程序实例,然后在该实例上调用BeginInvoke 。 从您要调用的特定线程获取或以某种方式从您的方法获取调度程序实例。

自从这个问题的最后一个答案发布以来,事情发生了一些变化。 System.Windows.Threading.Dispatcher.BeginInvoke现在是Deployment.Current.Dispatcher.BeginInvoke