[英]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.