از PC2st هم ممنون و متشکرم
من هم ممنونم که پست من رو مطالعه فرمودید.
دیشب که اون سورس رو دیدم و در همین جا یک پست واسش زدم، یک ساعت بعد به ذهنم رسید که در msdn هم سرچ کنم. اونوقت بود که فهمیدم در دات نت فریم ورک، یک کلاس برای همین منظور در BCL گنجانده شده که دیگه لازم نیست از اون کنترلی که در codeproject هست استفاده کنیم.
نام این کلاس ImageAnimator هست و طریقه استفاده از اون به شرح ذیل:
این کلاس یک Static Class میباشد، در این کلاس یک متد بنام Animate وجود داره که با استفاده از اون، مراحل نمایش یک gif بکمک یک ترد (thread) صورت میگیره.
این متد به شکل زیر استفاده میشه:
ImageAnimator.Animate(image, onFrameChangedHandler)
image، همون شئ ائی از نوع Image هست که مثلا تصویر gif در اون قرار داره.
onFrameChangedHandler، یک شئ از نوع EventHandler هست که بکمک اون به یک متد اشاره میکنه که توسط یک ترد باید مرتبا اجرا بشه تا زمانی که متد StopAnimate فراخوانی بشه.
فکر کنم بهتر باشه یک نمونه برنامه رو خودتون ببینید، یک PictureBox بنام myGifAnimation و یک Button بنام startButton و یک Button بنام stopButton ایجاد کنید و همه اینها رو روی یک فرم قرار بدید. میخوایم کاری کنیم که با کلیک روی اون دکمه ها، gif نمایش داده بشه یا stop بشه. پس برای هر کدوم از دو تا دکمه startButton و stopButton یک رویداد Click رو ایجاد میکنیم و در کل، کدهای داخل فرم برنامه باید شبیه به زیر باشه (به عبارت دیگه، کدهای زیر رو به جای کدهای فرم، کپی و paste کنید)
private Graphics g;
private EventHandler eh;
public Form1()
{
InitializeComponent();
myGifAnimation.BackgroundImage = new Bitmap(@"C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary\animations\FINDFILE16 .gif");
myGifAnimation.Size = myGifAnimation.BackgroundImage.Size;
g = myGifAnimation.CreateGraphics();
eh = new EventHandler(GifAnimation);
}
private void GifAnimation(object obj, EventArgs args)
{
ImageAnimator.UpdateFrames(myGifAnimation.BackgroundImage);
g.Clear(myGifAnimation.BackColor);
g.DrawImage(myGifAnimation.BackgroundImage, new Point(0, 0));
}
private void startButton_Click(object sender, EventArgs e)
{
ImageAnimator.Animate(myGifAnimation.BackgroundImage, eh);
}
privatevoid stopButton_Click(object sender, EventArgs e)
{
ImageAnimator.StopAnimate(myGifAnimation.BackgroundImage, eh);
}
مطمئن نیستم که به صورت صحیح کدها رو نوشته باشم. اگر ایراد یا اشکالی داشت، خوشحال میشم که گوشزد کنید.