[英]How to wait for EventHandler being triggered in UWP app?
我在 UWP 中制作了一個簡單的應用程序,但我遇到了 EventHandlers 沒有被觸發的問題......我在 Core.NET 中制作了相同的應用程序,如果我在末尾添加“Console.ReadLine()”,效果會很好main 函數,所以看起來 main 函數的線程在 EventHandler 被觸發之前就死了。
在 UWP 中,有沒有辦法讓實例保持活動一段時間(即:超時),以便有機會觸發 EventHandlers。
注意:這是問題的一個例子; 真正的上下文將發生在 Web 請求的接收中。
這是代碼:
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;
}
}
而不是使用
await DiscoverClient.DiscoverAsync()
你可以用
_ = DiscoverClient.DiscoverAsync().Result
這會強制test()
等待DiscoverAsync()
返回。
.Result
只能在返回類型不是void
,因此您可以讓DiscoverAsync()
在完成時返回一個布爾值。 然后使用丟棄進行賦值,使構造函數阻塞,直到DiscoverAsync()
完成。
我試圖將您評論中提到的庫集成到我的 UWP 應用程序中,當調用方法GetActiveTcpConnections
(Network.cs 中的第 60 行)時,它會拋出“拒絕訪問”exption。 因為事件 Client_DeviceHandler 不會被觸發。 請在 github 中查看此問題(問題#24369 )。
本文檔展示了如何在 UWP 中使用套接字。 您可以參考服務器示例來修改或實現該功能。
https://docs.microsoft.com/en-us/windows/uwp/networking/sockets
我嘗試了在互聯網上找到的多種方法(有些使用套接字),但我沒有找到有效的解決方案......
我最終使用了一種解決方法:通過 ip 循環搜索設備的主機名。 由於 IP 僅在我的路由器重新啟動時更改,因此很少需要發現過程,因此即使它有點沉重,對我來說也很好:-)
謝謝你們的幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.