如何解决有没有办法在仍然处理事件的同时暂停执行 UWP 控制台应用程序的主线程?
我正在为事件驱动的应用程序(现在是 UWP 控制台应用程序)设计原型。该应用程序对系统上新创建的文件进行操作,我正在使用 StorageFileQueryResult.ContentsChanged
来监视它们,但不确定在等待事件时我应该做什么来保持进程处于活动状态。我目前正在使用无限 while 循环(有效)。当然,一定有更好的方法吗?
我使用的是 c++/winrt,但任何通用的 UWP 解决方案都适用。
示例代码如下:
int main()
{
winrt::init_apartment();
Windows::Storage::StorageFolder folder{ Windows::Storage::StorageFolder::GetFolderFromPathAsync(SOME_PATH).get() };
auto queryOptions = Windows::Storage::Search::QueryOptions(Windows::Storage::Search::CommonFileQuery::DefaultQuery,NULL);
auto query = folder.CreateFileQueryWithOptions(queryOptions);
query.ContentsChanged(Query_ContentsChanged);
auto files = query.GetFilesAsync().get();
for (auto const& f : files) {
std::wcout << f.Name().c_str() << std::endl;
}
while (1) {} // Keep process alive
}
解决方法
通常,您可以使用 getchar()
或 system("pause")
来阻塞控制台线程。
您可以使用的另一种方法是锁定,请检查以下代码:
#include <iostream>
#include <condition_variable>
#include <mutex>
std::condition_variable cv;
std::mutex mtx;
int main()
{
winrt::init_apartment();
std::unique_lock<std::mutex> m(mtx);
Windows::Storage::StorageFolder folder{ Windows::Storage::StorageFolder::GetFolderFromPathAsync(L"C:\\test1").get() };
auto queryOptions = Windows::Storage::Search::QueryOptions(Windows::Storage::Search::CommonFileQuery::DefaultQuery,NULL);
auto query = folder.CreateFileQueryWithOptions(queryOptions);
query.ContentsChanged(Query_ContentsChanged);
auto files = query.GetFilesAsync().get();
cv.wait(m);
//getchar();
//system("pause");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。