2013-07-09 62 views
0

想知道如何才能暫停GIF圖像? 我正在訪問一個服務器,我想要一個GIF圖像播放時發生的事情,如果系統已凍結,我希望它暫停。 我有一個附有圖像的圖片框。 這可能嗎?在表單中暫停GIF

+0

請標記爲winforms,WPF或ASP.NET – SynerCoder

+0

也許這有助於:http://stackoverflow.com/questions/15647901/c-sharp-how-to-stop-animated-gif-from-continually-looping – Micha

+0

既然你知道(因爲它看起來)狀態正在改變(從進行中的空閒,反之亦然),平臺的一個可能的解決方案將是有一個動畫GIF和一個正常,只是在適當的時候改變它們。 – pasty

回答

4

PictureBox使用ImageAnimator類來動畫GIF圖像。其中有Stop()方法來停止動畫。不幸的是,它不公開你需要修改它的成員,你必須自己使用ImageAnimator。

如果您不反對使用Reflection來解決這些限制,那麼您可以使用後門。這通常是一個非常糟糕的主意,但Winforms處於維護模式,PictureBox將要再次改變的機率非常接近於零。它看起來像這樣:

using System.Reflection; 
... 

    private static bool IsAnimating(PictureBox box) { 
     var fi = box.GetType().GetField("currentlyAnimating", 
      BindingFlags.NonPublic | BindingFlags.Instance); 
     return (bool)fi.GetValue(box); 
    } 
    private static void Animate(PictureBox box, bool enable) { 
     var anim = box.GetType().GetMethod("Animate", 
      BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(bool) }, null); 
     anim.Invoke(box, new object[] { enable }); 
    } 

該樣本按鈕的Click事件可靠地停止和啓動動畫:

private void button1_Click(object sender, EventArgs e) { 
     Animate(pictureBox1, !IsAnimating(pictureBox1)); 
    } 

如果你不喜歡這些類型的黑客然後用ImageAnimator自己。

0

轉換所需的幀爲位圖

 Image gifImg = ActivscreenLibraries.Resources.throbber_running; 
     FrameDimension dimension = new FrameDimension(gifImg.FrameDimensionsList[0]); 
     // Number of frames 
     int frameCount = gifImg.GetFrameCount(dimension); 
     // Return an Image at a certain index 
     gifImg.SelectActiveFrame(dimension, 5); 
     Bitmap aa = new Bitmap(gifImg); 
     pictureBox1.Image = Image.FromHbitmap(aa.GetHbitmap()); 
0

正如你可以閱讀評論的question米莎已經鏈接,你可以簡單的設置

myPictureBox.Enabled = false; 

停止圖像動畫。將其設置爲true以再次啓動它。這是不需要反思。

Windows.Forms.PictureBox.OnEnabledChanged本質上調用Animate(Enabled)。請參閱source code