【发布时间】:2021-01-28 04:07:28
【问题描述】:
我在 UWP 中制作了一个简单的应用程序,但无法触发 EventHandlers...我在 Core.NET 中制作了相同的应用程序,如果我在main 函数的结尾,所以看起来 main 函数的线程在 EventHandler 被触发之前就死了。
在 UWP 中,有没有办法让实例保持活动状态(即:超时),以便有机会触发 EventHandler。
注意:这是问题的一个例子;真正的上下文将发生在网络请求的接收中。
代码如下:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
test();
}
private async void test() {
Client DiscoverClient;
DiscoverClient = new Client();
DiscoverClient.DeviceHandler += Client_DeviceHandler;
await DiscoverClient.DiscoverAsync();
}
static private void Client_DeviceHandler(object sender, BroadlinkDevice device)
{
int x = 0;
}
}
【问题讨论】:
-
你能说得更具体点吗?你想要 x = 0 例如在调用
DiscoverAsync()之前要执行的事件处理程序?由于有多种方法可以实现您想要的(使用Thread.Sleep(),使用自旋锁等) -
"x =0" 如果只是一些代码,那么我可以放置一个断点。预期的行为是 DiscoverAsync 搜索网络上的设备,然后为找到的每个设备调用 Client_DeviceHandler。问题是处理程序永远不会被调用。
-
我无法重现该问题,因为我不清楚客户端类的定义。您能否向我提供有关客户端类的更多详细信息?
-
@YanGu-MSFT 我正在尝试将github.com/kemalincekara/Broadlink.NET 代码中的“设备发现”集成到接收 Web 请求的 UWP Web 服务(部署在 Raspberry 上的 WIn10 IOT Core 上)中。我想在我的手机和家庭网络上的设备之间建立一个自定义桥接......
-
也许你可以尝试使用 Deferral 类。添加语句 var deferral = new Deferral(OnTaskCompleted);在 test() 开头并添加语句 deferral.Complete();在测试()结束时。 OnTaskCompleted 是在延迟完成时调用的方法。
标签: c# uwp async-await event-handling windows-10-iot-core