C# C uwp客户端服务器显示组件

C# C uwp客户端服务器显示组件,c#,uwp,client,visibility,C#,Uwp,Client,Visibility,我的服务器uwp端有问题 我尝试取消隐藏一些类似的组件,但我的应用程序挂起: private async void StreamSocketListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) { string request; using(var streamReader = new StreamReader(a

我的服务器uwp端有问题

我尝试取消隐藏一些类似的组件,但我的应用程序挂起:

private async void StreamSocketListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
    string request;
    using(var streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead()))
    {
        request = await streamReader.ReadLineAsync();
    }
    await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => this.txtBlk_Events.Text = request);

    if (request.Length > 0)
    {
        btnSend.Visibility = Visibility.Visible;
    }
}
有没有可能做到这一点? 感谢您的回答

可见性是一个UI属性,必须在UI线程上设置。在您的情况下,它将在ConnectionReceived事件处理程序运行的同一线程上运行,这要感谢async/await,它可能不是UI线程。您应该在Dispatcher.RunAsync调用中设置可见性,以确保它在UI线程上运行

private async void StreamSocketListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
    string request;
    using(var streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead()))
    {
        request = await streamReader.ReadLineAsync();
    }

    var setVisibility = request.Length > 0;

    await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => 
    {
       this.txtBlk_Events.Text = request;
       if ( setVisibility )
       {
          btnSend.Visibility = Visibility.Visible;
       }
    });              
}

它到底挂在哪里?on:btnSend.Visibility=Visibility.Visibility;如果我评论这条线,服务器保持活力,谢谢你的帮助和解释。如果它解决了你的问题,请考虑接受答案作为解决方案,这样问题就解决了。