windows - 为什么这会引发“读取访问冲突”?
问题描述
现在我试图在读取和处理文件时显示进度条对话框,但我的代码在关闭对话框时抛出“读取访问冲突”。
确切的错误信息是,
**__pUnknown** was 0xFFFFFFFFFFFFFFFF.
下面是我的代码。
void LoadFile(StorageFile^ file) {
ContentDialog^ loaderDialog = ref new ContentDialog();
loaderDialog->Title = L"Loading...";
loaderDialog->Content = ref new ProgressBar();
loaderDialog->ShowAsync();
Concurrency::create_task(FileIO::ReadTextAsync(file))
.then([&](Platform::String^ fileText) {
// File processing parts are omitted.
// ...
loaderDialog->Hide(); // Read access violation!
}
);
}
为什么这会变成一个错误?
解决方案
来自:https ://devblogs.microsoft.com/cppblog/ccx-part-2-of-n-types-that-wear-hats/
那么,^ 类型到底是什么?hat 类型是一种智能指针类型,它 (1) 自动管理 Windows 运行时对象的生命周期,并且 (2) 提供自动类型转换功能以简化 Windows 运行时对象的使用。
您正在对智能指针进行引用,因此您不会增加其引用计数,请参阅https://docs.microsoft.com/en-us/windows/win32/com/rules-for-managing-reference-counts。这意味着当继续执行时,引用是悬空的。
[=]
您可以尝试按 value而不是 reference捕获[&]
。请注意,您应该考虑在捕获中捕获每个变量,而不是使用[=]
或[&]
推荐阅读
- axios - 如何在标头axios中设置令牌
- google-kubernetes-engine - gke ingress 在 ingress nginx 前面
- blob - Instagram 如何实现自适应比特率流媒体?
- c++ - 静态代码分析 - 旧式表达式 C++
- typescript - 将类型参数传递给自定义钩子
- html - 将按钮文本动画化回原始位置
- java - Maven 中的 Spring Boot:“在 META-INF/spring.factories 中找不到自动配置类”
- autocomplete - 赛普拉斯测试材料 ui 自动完成
- java - 将 PDF/图片保存到 Kubernetes configmap 并在 springboot 应用程序中检索
- python - 提高 LSTM - 多类分类问题的准确性