Я работаю над настольным приложением WinUI3 на С++. Я проверял, как мы можем получить событие, когда сеть, к которой подключена система, меняется. Я наткнулся на событие NetworkInformation.NetworkStatusChanged. Но мне не удалось найти ни одного примера его реализации на C++.
NetworkStatusChangedEventHandler говорит, что у него есть один параметр, который является объектом IInspectable.
Я пытался
Static void NetworkStatusChange(winrt::Windows::Foundation::IInspectable const& sender);
Но это дало эту ошибку
*\Generated Files\winrt\Windows.Networking.Connectivity.h(2213,81): error C2297: '.*': not valid as right operand has type 'const M'
Не могли бы вы помочь мне с тем, как правильно реализовать событие NetworkStatusChanged в настольном приложении WinUI3 C++.
Спасибо.
Вот как это можно сделать с помощью C++/WinRT:
Добавьте это в pch.h:
#include <winrt/Windows.Networking.Connectivity.h>
Добавьте это где-нибудь в свой код:
// you can instead add a "using namespace Windows::Networking::Connectivity;"
// and use NetworkInformation directly if you prefer
Windows::Networking::Connectivity::NetworkInformation info{};
info.NetworkStatusChanged([=](auto&&...) // sender is not super interesting in this type of event so I've not declared it
{
// do your stuff here
MessageBox(nullptr, L"Something Changed!", L"Network", 0);
});
Если вы предпочитаете «сырой» способ C/C++, вот пример: Как асинхронно обнаруживать события изменения сети с помощью C++ WinRT
Спасибо, это было очень полезно, не могли бы вы объяснить параметры [=] и (...), используемые в функции NetworkStatusChanged().
@RaymondChen - Еще раз спасибо. Странно, я даже не видел предупреждения (learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/… ) в окнах Output/ErrorList. (С++ лямбда настолько сложна по сравнению с С#...)