Как отключить сетку во время работы? - PullRequest
0 голосов
/ 24 мая 2018

Итак, я пытался отключить сетку в моем wpf во время работы, а затем снова включить ее после ее завершения, но до сих пор у меня не получилось.Вот мой текущий код, который, по моему мнению, должен выполнить:

Код XAML

 <Button Name="ButtonCompare" Grid.Column="2" Grid.Row="6" Height="25" Width="80" Click="compare" Margin="0,0,0,7">Compare</Button>

Код C #

    private async Task DoWork()
    {
        await Task.Run(() =>
        {
            Thread.Sleep(3000);
        });
    }

    private async void compare(object sender, RoutedEventArgs e)
    {

        if (bu1Valid is false || bu2Valid is false)
        {
            MessageBox.Show("A valid backup path has not been entered", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
        }
        else
        {
            myDatagrid.IsEnabled = false;
            await DoWork();
            myDatagrid.IsEnabled = true;
        }
    }

До сих пор я пытался использовать привязки, различные события на кнопке и события в сетке, но все они имели одинаковый результат, когда все мои элементы управления в сетке оставались включенными.Если я уберу части, которые повторно активируют сетку, то сетка будет отключена после завершения события, но я пытаюсь отключить ее, прежде чем она начнет работу, чтобы кнопка не могла быть нажата снова, покаработа выполняется.

Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вот пример.

private async void startButton(object sender, RoutedEventArgs e)
{
    CancelEnabled = true;
    await start();
}

private async void Button_Click(object sender, RoutedEventArgs e)
{
    btnTest.IsEnabled = false;
    await Dowork();
    btnTest.IsEnabled = true;
}
private async Task Dowork()
{
    await Task.Delay(1000);
}
0 голосов
/ 24 мая 2018

Вам необходимо использовать асинхронный вызов в вашем методе DoWork ().Помещение «await» перед вызовом гарантирует, что код, следующий за асинхронным вызовом, не будет выполнен до завершения вызова.

private async void doWork()
{
        await MakeYourCallHere();
        myDatagrid.IsEnabled = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...