簡體   English   中英

如何在 UWP 應用中等待 EventHandler 被觸發?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM