Как я могу дважды изменить фоновое изображение кнопки в событии MouseLeftButtonDown? - PullRequest
0 голосов
/ 07 января 2019

Я пишу следующий обработчик событий в MainWindow.xaml.cs. Я хочу добиться такого эффекта: когда бизнес-логика работает, фоновое изображение кнопки запуска переключается на powerOnOff1.png, когда бизнес-логика завершается, фоновое изображение переключается обратно на powerOnOff0.png.

    private void Run_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                //set run button background image to powerOnOff1.png indicates business logic is going to run.
                BitmapImage ima0 = new BitmapImage(new Uri("picture/powerOnOff1.png", UriKind.Relative));             
                image.Source = ima0;

                //business logic
                ...... 

                //restore Runbutton background image to powerOnOff0.png indicates business logic is finished.
                BitmapImage ima1 = new BitmapImage(new Uri("picture/powerOnOff0.png", UriKind.Relative));
                image.Source = ima1;  
            }

Над кодами не работает. Это всегда показывает powerOnOff0.png фоновое изображение. Требуется ли многопоточность?

1 Ответ

0 голосов
/ 07 января 2019

Требуется ли многопоточность?

Да. Вам необходимо выполнить бизнес-логику в фоновом потоке. Самый простой способ сделать это - запустить новое задание и дождаться его:

private async void Run_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    //set run button background image to powerOnOff1.png indicates business logic is going to run.
    image.Source = new BitmapImage(new Uri("picture/powerOnOff1.png", UriKind.Relative));

    await Task.Run(() =>
    {
        //business logic here
    });

    //restore Runbutton background image to powerOnOff0.png indicates business logic is finished.
    image.Source = new BitmapImage(new Uri("picture/powerOnOff0.png", UriKind.Relative));
}
...