2

我在 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;
        ...
    }
}
4

2 回答 2

4

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

您必须将await关键字与以异步结尾的方法一起使用。这意味着您的方法mymethod必须符合异步模式。async如果您正在编写 Windows 8 应用程序,则值得一读。

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

或者,如果你想阻塞线程,你可以GetResults()AsTask().Result.

除了单元测试或肮脏的研究/演示代码之外,没有太多阻止的充分理由。如果你不得不阻塞,你可能在架构层面做错了什么。

于 2013-06-10T19:57:59.453 回答
0

您可以将代码放在 onNavigatedTo 事件中

于 2012-10-31T11:44:52.753 回答