程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 在WinForm中控制GIF動畫的啟停的一種方法

在WinForm中控制GIF動畫的啟停的一種方法

編輯:.NET實例教程
在WinForm中許多控件(本文以最常用的PictureBox為例)都有Image屬性,如果該Image是一個動畫Gif的話,它會自動運行動畫。在某些場合,我們希望控制該動畫的啟停,此時我們首先想到了ImageAnimator,但實際使用時,我們發現以下指令根本不起作用,Gif停不下來,具體原因不明:

        ImageAnimator.StopAnimate(box.Image, new EventHandler(OnImageAnimate));
        private void OnImageAnimate(Object sender, EventArgs e)
        {
            this.Invalidate();
        }
    此時,我想到控件的Enable屬性,在其為false時,Gif是不會啟動的,一旦設其為true,則動畫立刻自動運行,因此只要該屬性不作它用,則完全可以用來控制動畫的啟停。
    需要注意的是線程的安全性,以下代碼示例實現了某一控件點擊後啟動Gif運行5秒鐘,然後停下來:

        delegate void SetGifEnableCallback(Control control, bool enable);

        void picboxSearching_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(new ThreadStart(Animate));
            t.Start();
        }

        private void SetGifEnable(Control control, bool enable)
        {
            if (control.InvokeRequired)
           {
                SetGifEnableCallback callback = new SetGifEnableCallback(SetGifEnable);
                this.Invoke(callback, new object[] { control, enable });
            }
            else control.Enabled = enable;
        }

        private void Animate()
        {
            PictureBox box = this.pictureBox1;
            AutoResetEvent waitHandler = new AutoResetEvent(false);
            SetGifEnable(box, true);
            waitHandler.WaitOne(5000, true);
            SetGifEnable(box, false);
        }
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved