Windows runtime 是否有C#'的替代品;让我们用C++/CX?Win10

Windows runtime 是否有C#'的替代品;让我们用C++/CX?Win10,windows-runtime,uwp,c++-cx,Windows Runtime,Uwp,C++ Cx,UWP、Win10、C++/CX 我想在C++/CX中同步使用WinRT异步函数,就像C#的await一样。在C++/CX中是否有C#的wait的替代品 我读过这篇文章,但它不起作用,也许它是针对win8的,在win10中不受支持,或者我错了 顺便说一句,Concurency::create_task(option).get()满足了我的需要,但是太长了,而且它不能在UI线程上工作(我不知道为什么,你能告诉我你是否知道?) 谢谢:)编辑:从VS 2015 Update 2开始,VC++支持生产使

UWP、Win10、C++/CX

我想在C++/CX中同步使用WinRT异步函数,就像C#的await一样。在C++/CX中是否有C#的wait的替代品

我读过这篇文章,但它不起作用,也许它是针对win8的,在win10中不受支持,或者我错了

顺便说一句,Concurency::create_task(option).get()满足了我的需要,但是太长了,而且它不能在UI线程上工作(我不知道为什么,你能告诉我你是否知道?)


谢谢:)

编辑:从VS 2015 Update 2开始,VC++支持生产使用的
co_wait
(尽管它处于特殊标志下,因为它尚未标准化)。你可以从中看到更多

注意,C#中的
wait
不是一个同步调用;没有任何阻碍。它只是给人一种顺序执行的错觉


C++在UI线程上显式阻止调用
get
,以避免挂起UI。

我终于找到了使用wait的方法,但它是有限的

在VS2015中使用wait

等待和产量是实验性的。如果要使用它们,请记住它们仅在x64上受支持,并设置一些编译器选项:

  • 添加/等待
  • 禁用/RTC
  • /ZI->/ZI

我不知道您的问题的答案,但我建议您将C#dll导入到您的项目中。这里有一个例子。因此,您将能够从C++项目中访问Cy.C./.NET方法,将可恢复函数添加到C++是一个。它们通常以蜗牛般的速度移动,您至少要等到C++17。如果您想使用,那么今天就可以使用VS2015。您为什么要这样做?我想不出有什么令人信服的理由来阻止UI线程。如果需要序列化操作,请使用@问题解决者:如果你只有一把锤子,那么每一个问题看起来都像钉子。现在你有两个问题了。@I非常感谢你的回答。事实上,我们的目标是将现有项目交付给WinRT,该项目有太多的遗留代码。例如,如果有API使用win32 API保存文件,而其他代码与格式无关,那么通过WinRT重新编译API并保持其他代码不变的成本将是最低的。不幸的是,WinRT异步API不能满足我们的要求,这就是我问这个问题的原因。谢谢。我对c不熟悉。这听起来很神奇,然后我有一个测试。正如你所说,它不会被阻止,如果等待在UI线程。你能告诉我UI线程在等待期间做什么吗?我怀疑它会返回事件循环并继续处理事件。保持逻辑顺序会有问题吗?例如,如果一个事件处理程序依赖于前一个事件处理程序的结果,它会使代码混乱吗?谢谢:)你说得对;它一直在运行事件循环,因此您需要通过禁用UI控件来保护代码不被重新进入(例如),直到异步方法完成。您的意思是C++的get与C#的WAIT不同吗?C++的get不能返回事件循环。这就是为什么我们不能在C++线程上等待C++的原因吗?最终我得到C++的等待工作:它确实挂UI,与C#的等待不同。非常感谢。参考:(本文有点过时,但仍然有用)
co_wait
现在在所有生产使用的体系结构上都支持!