Подтвердить что ты не робот

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));
                }
            });

        }
    }
}
4b9b3361

Ответ 1

Ошибка указывает, что для вызова BeginInvoke требуется экземпляр Dispatcher, поскольку это метод экземпляра. Где вы получаете этот экземпляр, зависит от того, где вы хотите отправить вызов.

Возможно, вы можете попробовать использовать статическое свойство Dispatcher.CurrentDispatcher, чтобы получить экземпляр диспетчера для текущего потока, а затем вызвать BeginInvoke в этом экземпляре. Либо это, либо каким-то образом получить экземпляр диспетчера для вашего метода из определенного потока, который вы хотите вызвать.

Ответ 2

Вещи немного изменились, поскольку последний ответ был отправлен для этого вопроса. System.Windows.Threading.Dispatcher.BeginInvoke теперь Deployment.Current.Dispatcher.BeginInvoke