2

根据 cppwinrt 的主文档迁移 C++...,“用于设置 Windows 运行时属性值的等效 C++/WinRT 源代码调用与 Windows 运行时属性同名的方法和新值的参数:

record.UserState(newValue); // Set the UserState property

但这在尝试设置 Duration 对象的 TimeSpan 属性时似乎不起作用:

TimeSpan ts = TimeSpan(6000000);
Duration duration = Duration();
duration.TimeSpan(ts);

第三行在“持续时间”上产生智能感知错误:“调用没有适当运算符或转换函数到函数指针类型的类类型对象。” 同一行的构建错误是“术语不评估为采用 1 个参数的函数”。我应该补充一点,Duration 的构造函数似乎有一个参数,一个 TimeSpan,但这也不被接受。使用 cppwinrt 时如何设置 Duration 的 TimeSpan 属性?

4

3 回答 3

5

请记住,在 C++/WinRTWindows::Foundation::TimeSpan中只是std::chrono::duration的 typedef ,因此您可以使用 std::chrono 的有用功能。

直接初始化:

Duration duration{ std::chrono::milliseconds{ 100 }, DurationType::Automatic };

单独设置:

Duration duration{ }; duration.TimeSpan = std::chrono::milliseconds{ 100 };

于 2018-04-22T08:41:55.560 回答
0

Windows::Foundation::TimeSpan被定义为

using TimeSpan = std::chrono::duration<int64_t, impl::filetime_period>;

所以当你有一个函数时TimeSpan,比如说DispatcherQueueTimer::Interval,你可以简单地做

timer.Interval(std::chrono::seconds{ 1 });

或者

using namespace std::literals::chrono_literals; timer.Interval(1s);
于 2022-02-04T19:26:54.990 回答
0

好的,我想我可以回答我自己的问题。虽然它在 MSDN .NET 文档中称为 Duration 的“属性”,但在此 cppwinrt 环境中 TimeSpan 不是 Duration 的属性,而是 Duration 结构的数据值。所以你不要使用上述设置属性的方法来设置它;你这样设置:

TimeSpan ts = TimeSpan(6000000);
Duration duration = Duration();
duration.TimeSpan = ts;

希望对遇到类似情况的人有所帮助...

于 2017-12-24T21:36:44.203 回答