在意外的时间调用了一个方法。 (HRESULT异常:0x8000000E)异常是由方法抛出的

时间:2012-10-31 10:48:23

标签: windows-8

我在Windows 8应用程序中用C#创建一个方法,我从XML文件中读取数据并将其存储在对象中,并将对象值绑定到UI元素中。

我正在使用一些异步文件读写方法,因为我在主页面构造函数中调用此方法,我无法使用await关键字,因此我得到以下异常。“在意外时间调用了一个方法。 (来自HRESULT的异常:0x8000000E)“

当我在没有调试的情况下运行应用程序但是当我通过单步调试代码(使用F11)时,我得到了所需的输出。如何在不调试的情况下获得所需的输出

我已粘贴下面的代码段

public object mymethod()
{
    var FileshareDetails = Windows.Data.Xml.Dom.XmlDocument.LoadFromFileAsync(file, localsettings);
    var QFileshare = FileshareDetails.GetResults();
    XmlNodeList nodeList = QFileshare.SelectNodes("/FileShareDetails/FileShare");

    foreach (IXmlNode node in nodeList)
    {
        QSFileShare FileShare = new QSFileShare();
        FileShare.FileShareName = node.Attributes[0].InnerText;
        ...
    }
}

2 个答案:

答案 0 :(得分:4)

GetResults是非阻塞的,即它会立即尝试从异步执行的方法获取结果,即使该方法尚未完成运行且结果尚未到达。

您必须将await关键字与结束Async的方法结合使用。这意味着您的方法mymethod必须符合异步模式。如果您正在编写Windows 8应用程序,那么值得阅读整个async内容。

异步是一种编译器技巧,旨在使人们更容易,并使人们不会阻止UI线程并制作更具响应性的应用程序。

或者,如果您想阻止该主题,可以使用GetResults()切换AsTask().Result来电。

除了单元测试或脏研究/演示代码之外,没有很多理由可以阻止。如果你不得不阻止,你可能在架构层面上做错了。

答案 1 :(得分:0)

您可以将代码放在onNavigatedTo事件