c# - 在意外的时间调用了一个方法。 (HRESULT : 0x8000000E) exception was thrown by a method 的异常

标签 c# windows-8

我正在 Windows 8 应用程序中用 C# 创建一个方法,我从 XML 文件读取数据并将其存储在对象中,并将对象值绑定(bind)到 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;
        ...
    }
}

最佳答案

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

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

异步是一种编译器技巧,旨在使其变得更容易,并促使人们不阻塞 UI 线程并制作响应更快的应用程序。

或者,如果您想阻止线程,可以使用 AsTask().Result 切换 GetResults() 调用。

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

关于c# - 在意外的时间调用了一个方法。 (HRESULT : 0x8000000E) exception was thrown by a method 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13156163/

相关文章:

c# - 如何结束 Windows 8 动态磁贴的定期更新

javascript - 如何在 Visual Studio 2012 for Windows 8 中使用 JavaScript 运行外部可执行文件

c# - 在遗留 .NET 平台上使用 .NET Core 包

c# - 如何以编程方式启用远程桌面连接?

c# - 如何检查两个 System.Drawing.Color 结构是否以 16 位色深表示相同的颜色?

c# - 从 ANSII 编码的文件中读取文本

c# - 使用 C# 和 XAML 在 Windows 应用商店应用程序中绑定(bind)资源文件值字符串

c# - 在 UI 线程上调用异步方法

c# - 在 C# 应用程序中使用 SQL 的最简单方法?

c# - Windows 8 应用程序开发 - 是否可以使用 System.Net.Sockets? (C#)