Как я могу дважды изменить фоновое изображение кнопки в событии MouseLeftButtonDown?

Я пишу следующий обработчик событий в 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 ответ

Решение

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

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

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));
}
Другие вопросы по тегам