C# uwp 客户端服务器显示组件
C# uwp client server show components
我的服务器 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;
}
}
是否可以这样做?
感谢您的回答
Visibility
是一个 UI 属性 并且必须在 UI 线程上设置。在您的情况下,它将 运行 在同一线程上, ConnectionReceived
事件处理程序在 运行 上(感谢 async/await
),这可能不是 UI 线程。您应该改为在 Dispatcher.RunAsync
调用中设置 Visibility
以确保它 运行 在 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;
}
});
}
我的服务器 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;
}
}
是否可以这样做? 感谢您的回答
Visibility
是一个 UI 属性 并且必须在 UI 线程上设置。在您的情况下,它将 运行 在同一线程上, ConnectionReceived
事件处理程序在 运行 上(感谢 async/await
),这可能不是 UI 线程。您应该改为在 Dispatcher.RunAsync
调用中设置 Visibility
以确保它 运行 在 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;
}
});
}