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));
}
});
}
}
}
Ответы
Ответ 1
Ошибка указывает, что для вызова BeginInvoke
требуется экземпляр Dispatcher
, поскольку это метод экземпляра. Где вы получаете этот экземпляр, зависит от того, где вы хотите отправить вызов.
Возможно, вы можете попробовать использовать статическое свойство Dispatcher.CurrentDispatcher
, чтобы получить экземпляр диспетчера для текущего потока, а затем вызвать BeginInvoke
в этом экземпляре. Либо это, либо каким-то образом получить экземпляр диспетчера для вашего метода из определенного потока, который вы хотите вызвать.
Ответ 2
Вещи немного изменились, поскольку последний ответ был отправлен для этого вопроса.
System.Windows.Threading.Dispatcher.BeginInvoke
теперь Deployment.Current.Dispatcher.BeginInvoke