Асинхронная операция без замерзания интерфейса WPF
у меня возникла потребность поработать в WPF (.NET Core 3.1) вместо колеги (сам на ASP.NET Core кручусь). Мне надо выполнить следующие действие:
private async void btnLog_Click(object sender, RoutedEventArgs e)
{
btnLog.Content = "Waiting...";
try
{
if (await client.Auth(new AuthModel(tbLogin.Text, tbPass.Password)))
{
if (Convert.ToBoolean(cbRem.IsChecked))
{
AuthWork.SetAuth(new AuthModelView { IsAuth = true, AccessToken = client.AccessToken });
}
var rez = new WorkWindow();
this.Close();
rez.Show();
}
}
catch (Exception ex)
{
btnLog.Content = "Login";
Messages.Error(ex.Message);
}
}
код самой формы:
<Window x:Class="some_project"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:some_project"
mc:Ignorable="d"
Height="320" MinHeight="320"
Width="600" MinWidth="600"
WindowStartupLocation="CenterScreen"
ResizeMode="NoResize"
WindowStyle="None">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="65*"/>
</Grid.RowDefinitions>
<Canvas Grid.Row="0" Background="#1F2936" x:Name="can" MouseLeftButtonDown="Canvas_MouseLeftButtonDown">
<Image Source="Img/output-onlinepngtools.png" Width="25" Canvas.Left="5"/>
<Button Canvas.Right="1" Width="25" Height="25" Content="X" FontSize="16" Foreground="#E0E0E0" Background="Transparent" BorderBrush="Transparent" Click="Button_Click"/>
</Canvas>
<Grid x:Name="mwGrid" Grid.Row="1" Grid.RowSpan="2" Background="#0E1621">
<TextBlock Text="{Binding Text}" Foreground="White"/>
<Label Width="50" Height="30"
Content="Login:"
Background="Transparent" Foreground="#E0E0E0"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
Grid.Row="0"
Margin="0,0,220,184"
FontSize="14"/>
<TextBox Width="200" Height="27" x:Name="tbLogin"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
Background="#242F3D" BorderBrush="Transparent" Foreground="#E0E0E0"
VerticalContentAlignment="Center"
Grid.Row="0"
Margin="0,0,11,185"
FontSize="14">
<TextBox.Template>
<ControlTemplate>
<Border CornerRadius="8" Padding="2" BorderThickness="1" BorderBrush="#242F3D" Background="#242F3D">
<ScrollViewer Margin="0" x:Name="PART_ContentHost" />
</Border>
</ControlTemplate>
</TextBox.Template>
</TextBox>
<Label Width="70" Height="30"
Content="Password:"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
Background="Transparent" Foreground="#E0E0E0"
Margin="0,0,220,141"
FontSize="14"/>
<PasswordBox Width="200" Height="27" x:Name="tbPass"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
Background="#242F3D" BorderBrush="Transparent" Foreground="#E0E0E0"
VerticalContentAlignment="Center"
Margin="0,0,11,137"
FontSize="14">
<PasswordBox.Template>
<ControlTemplate>
<Border CornerRadius="8" Padding="2" BorderThickness="1" BorderBrush="#242F3D" Background="#242F3D">
<ScrollViewer Margin="0" x:Name="PART_ContentHost" />
</Border>
</ControlTemplate>
</PasswordBox.Template>
</PasswordBox>
<CheckBox x:Name="cbRem"
VerticalAlignment="Top" HorizontalAlignment="Right"
Content="Remember"
Foreground="#E0E0E0" Background="#E0E0E0" IsChecked="True"
FontSize="12"
Margin="0,168,133,0"/>
<Button x:Name="btnLog" Click="btnLog_Click"
Width="200" Height="27"
VerticalAlignment="Top" HorizontalAlignment="Right"
Content="Login"
Background="Transparent" Foreground="#E0E0E0"
Margin="0,210,10,0"
FontSize="14">
<Button.Style>
<Style>
<Style.Triggers>
<Trigger Property="Button.IsMouseOver" Value="True">
<Setter Property="Button.Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button Background="Transparent" Foreground="#E0E0E0" BorderBrush="Transparent"
Grid.Row="2"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
Margin="0,0,85,20"
FontSize="14"
x:Name="btnReg"
Click="btnReg_Click">
<TextBlock TextDecorations="Underline" FontStyle="Italic">
Register
</TextBlock>
</Button>
</Grid>
</Grid>
</Window>
При выполнении этого кода на время получения данных с сервера интерфейс окна замерзает, подскажите, чё делать? Зарание спасибо