Асинхронная операция без замерзания интерфейса 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>

При выполнении этого кода на время получения данных с сервера интерфейс окна замерзает, подскажите, чё делать? Зарание спасибо


Ответы (0 шт):