Dispatcher.BeginInvoke问题

时间:2010-04-08 00:27:45

标签: c# dispatcher

我得到了“此代码的非静态字段,方法或属性'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 个答案:

答案 0 :(得分:17)

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

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