当前位置: 首页 > news >正文

西安网站建设设计网络规划设计师证书有什么用

西安网站建设设计,网络规划设计师证书有什么用,深圳手机网站模板,医疗网站建设行业现状和影响跨 ABI 的简单信号 如果无需连同事件传递任何形参或实参,则可以定义自己的简单 Windows 运行时委托类型。 以下示例展示 Thermometer 运行时类的更简易版本。 它声明名为 SignalDelegate 的委托类型,然后使用该类型来引发信号类型事件,而不是…
跨 ABI 的简单信号

如果无需连同事件传递任何形参或实参,则可以定义自己的简单 Windows 运行时委托类型。 以下示例展示 Thermometer 运行时类的更简易版本。 它声明名为 SignalDelegate 的委托类型,然后使用该类型来引发信号类型事件,而不是具有参数的事件。

// ThermometerWRC.idl
namespace ThermometerWRC
{delegate void SignalDelegate();runtimeclass Thermometer{Thermometer();event ThermometerWRC.SignalDelegate SignalTemperatureIsBelowFreezing;void AdjustTemperature(Single value);};
}// Thermometer.h
...
namespace winrt::ThermometerWRC::implementation
{struct Thermometer : ThermometerT<Thermometer>{...winrt::event_token SignalTemperatureIsBelowFreezing(ThermometerWRC::SignalDelegate const& handler);void SignalTemperatureIsBelowFreezing(winrt::event_token const& token);void AdjustTemperature(float deltaFahrenheit);private:winrt::event<ThermometerWRC::SignalDelegate> m_signal;float m_temperatureFahrenheit{ 0.f };};
}// Thermometer.cpp
...
namespace winrt::ThermometerWRC::implementation
{winrt::event_token Thermometer::SignalTemperatureIsBelowFreezing(ThermometerWRC::SignalDelegate const& handler){return m_signal.add(handler);}void Thermometer::SignalTemperatureIsBelowFreezing(winrt::event_token const& token){m_signal.remove(token);}void Thermometer::AdjustTemperature(float deltaFahrenheit){m_temperatureFahrenheit += deltaFahrenheit;if (m_temperatureFahrenheit < 32.f){m_signal();}}
}// App.cpp
struct App : implements<App, IFrameworkViewSource, IFrameworkView>
{ThermometerWRC::Thermometer m_thermometer;winrt::event_token m_eventToken;...void Initialize(CoreApplicationView const &){m_eventToken = m_thermometer.SignalTemperatureIsBelowFreezing([] { /* ... */ });}...void Uninitialize(){m_thermometer.SignalTemperatureIsBelowFreezing(m_eventToken);}...void OnPointerPressed(IInspectable const &, PointerEventArgs const & args){m_thermometer.AdjustTemperature(-1.f);...}...
};
项目中的参数化委托、简单信号和回调

如果所需事件是 Visual Studio 项目内部的(未跨二进制文件),而在内部这些事件不限于 Windows 运行时类型,则仍可使用 winrt::event<Delegate> 类模板。 请直接使用 winrt::delegate 而不是实际的 Windows 运行时委托类型,因为 winrt::delegate 也支持非 Windows 运行时参数。

以下示例先显示不采用任何参数的委托签名(本质上即简单信号),然后显示采用字符串的委托签名。

如果所需事件是 Visual Studio 项目内部的(未跨二进制文件),而在内部这些事件不限于 Windows 运行时类型,则仍可使用 winrt::event<Delegate> 类模板。 请直接使用 winrt::delegate 而不是实际的 Windows 运行时委托类型,因为 winrt::delegate 也支持非 Windows 运行时参数。

以下示例先显示不采用任何参数的委托签名(本质上即简单信号),然后显示采用字符串的委托签名。

winrt::event<winrt::delegate<>> signal;
signal.add([] { std::wcout << L"Hello, "; });
signal.add([] { std::wcout << L"World!" << std::endl; });
signal();winrt::event<winrt::delegate<std::wstring>> log;
log.add([](std::wstring const& message) { std::wcout << message.c_str() << std::endl; });
log.add([](std::wstring const& message) { Persist(message); });
log(L"Hello, World!");

注意如何向事件添加尽可能多的订阅委托。 但会产生一些与事件相关的开销。 如果只需仅具有一个订阅委托的简单回调,则你可以独立使用 winrt::delegate<…T>。

winrt::delegate<> signalCallback;
signalCallback = [] { std::wcout << L"Hello, World!" << std::endl; };
signalCallback();winrt::delegate<std::wstring> logCallback;
logCallback = [](std::wstring const& message) { std::wcout << message.c_str() << std::endl; }f;
logCallback(L"Hello, World!");
 可延迟事件

Windows 运行时中的常见模式是可延迟事件。 事件处理程序通过调用事件参数的 GetDeferral 方法采用延迟。 这样做会向事件源指示应推迟事件后活动,直到延迟完成。 这允许事件处理程序执行异步操作以响应事件。

winrt::deferrable_event_args 结构模板是一个帮助程序类,用于实现(生成)Windows 运行时延迟模式。 下面是一个示例。

// Widget.idl
namespace Sample
{runtimeclass WidgetStartingEventArgs{Windows.Foundation.Deferral GetDeferral();Boolean Cancel;};runtimeclass Widget{event Windows.Foundation.TypedEventHandler<Widget, WidgetStartingEventArgs> Starting;};
}// Widget.h
namespace winrt::Sample::implementation
{struct Widget : WidgetT<Widget>{Widget() = default;event_token Starting(Windows::Foundation::TypedEventHandler<Sample::Widget, Sample::WidgetStartingEventArgs> const& handler){return m_starting.add(handler);}void Starting(event_token const& token) noexcept{m_starting.remove(token);}private:event<Windows::Foundation::TypedEventHandler<Sample::Widget, Sample::WidgetStartingEventArgs>> m_starting;};struct WidgetStartingEventArgs : WidgetStartingEventArgsT<WidgetStartingEventArgs>,deferrable_event_args<WidgetStartingEventArgs>//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^{bool Cancel() const noexcept { return m_cancel; }void Cancel(bool value) noexcept { m_cancel = value; }bool m_cancel = false;};
}

下面是事件接收方使用可延迟事件模式的方式。

// EventRecipient.h
widget.Starting([](auto sender, auto args) -> fire_and_forget
{auto deferral = args.GetDeferral();if (!co_await CanWidgetStartAsync(sender)){// Do not allow the widget to start.args.Cancel(true);}deferral.Complete();
});

 作为事件源的实现者(生成者),从 winrt::deferrable_event_args 派生事件 args 类。 deferrable_event_args<T> 为你实现 T::GetDeferral。 它还公开新的帮助程序方法 deferrable_event_args::wait_for_deferrals,该方法在所有未完成的延迟完成后完成(如果没有延迟要执行,则会立即完成)。

// Widget.h
IAsyncOperation<bool> TryStartWidget(Widget const& widget)
{auto args = make_self<WidgetStartingEventArgs>();// Raise the event to let people know that the widget is starting// and give them a chance to prevent it.m_starting(widget, *args);// Wait for deferrals to complete.co_await args->wait_for_deferrals();// Use the results.bool started = false;if (!args->Cancel()){widget.InsertBattery();widget.FlipPowerSwitch();started = true;}co_return started;
}
http://www.yayakq.cn/news/938778/

相关文章:

  • 中企动力 网站价格怎么用公司网站做公司域名多个
  • 100m网站空间服务费国际新闻联播直播 今天
  • wordpress 仿站 教程网用什么l软件做网站了
  • 广告联盟没有网站怎么做域名查询网站信息
  • 网站的建设部署与发布餐饮网站开发性能需求
  • 北京的制作网站的公司有哪些网站目录结构设计
  • 虚拟主机搭建多个网站如何做一个网页界面
  • 如何创做网站建筑做地图分析的网站
  • wap网站引导页特效黄骅港引航站
  • 购买腾讯云 做网站安卓手机网站源码下载
  • 合肥的网站建设公司哪家好淘宝网站建设需要哪些技术
  • uo建设网站国内营销策划公司排名
  • wordpress改 cms免费seo推广公司
  • 哪个行业最容易做网站国外网站视觉设计趋势
  • 期货网站做模拟seo优化外包公司
  • 如何选择建设网站类型wordpress的密码加密
  • 大气好看的网站专业网站营销
  • 网站建设 主要内容深圳营销型网站建设 宝安西乡
  • 网上做网站接活怎么样网站怎么管理
  • 网站接入服务 公司网页制作软件免费版dw
  • 论坛备案网站名称企业所得税
  • 用什么软件做商务网站构建网站无障碍建设
  • 什么网站用来做商城好wordpress图片列表页
  • 世界杯竞猜网站开发免费的黄台直播
  • python网站开发源码新东方烹饪学校
  • 中石化两学一做网站成都房地产信息网
  • 网站建设黄页在线免费深圳外贸英语培训
  • 来广营网站建设个人信息网站
  • 业绩显示屏 东莞网站建设技术支持Wordpress更改用户图标
  • 整站网站优化价格淘客网站要备案