簡體   English   中英

在Visual Studio 2013上的VC#中以可視方式模擬按鈕單擊的方式:請告訴我有什么問題

[英]Way to visually simulate button click in VC# on Visual Studio 2013: Please tell me what's wrong

這是我的Form類中的方法。 我在按鈕上使用了自定義圖像背景,並且想要對其進行更改,以使其看起來具有動畫效果:

 private void restaurantButton_Click(object sender, EventArgs e)
    {

        System.Threading.Thread.Sleep(75);
        restaurantButton.BackgroundImage = Properties.Resources.buttonBackClicked;
        System.Threading.Thread.Sleep(150);
        restaurantButton.BackgroundImage = Properties.Resources.buttonBack;
    }

如果我進行一次更改,就會發生動畫。 上面的代碼似乎沒有任何作用。 請提供幫助,如果可以,建議使用另一種方式在VC#(VS2013)中為控件進行動畫處理(例如,控件圖像,單擊時間等)。

您正在UI線程上睡覺,阻止UI更新。

而是使用await Task.Delay()進行非阻塞等待。

問題是您正在阻止UI線程並且不允許其更新。 您在這里僅使用一個線程,該線程恰好是對UI進行可視更新的線程。 因此,如果您使正在更新UI的線程進入睡眠狀態,則該線程將不會更新(因為它處於睡眠狀態)。

為了解決這個問題,您需要異步地等待一個單獨的線程。 .Net 4.5中引入的async / await關鍵字將使此操作非常容易,請參見下面的代碼:

private async void restaurantButton_Click(object sender, EventArgs e)
{
    await Task.Delay(75);
    restaurantButton.BackgroundImage = Properties.Resources.buttonBackClicked;
    await Task.Delay(150);
    restaurantButton.BackgroundImage = Properties.Resources.buttonBack;
}

當您調用await時,實際上發生的是當前線程正在釋放(釋放),而Task.Delay正在另一個線程上執行。 當第二個線程完成時(在這種情況下等待),它會發信號通知您的主線程以繼續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM