PDA

View Full Version : وقفه در تایمر و کند شدن آن



bahar_engineer
پنج شنبه 16 مهر 1388, 17:25 عصر
سلام

من یه صفحه دارم که شامل 6 انیمیشن gif animation هست که یک تایمر هم دارم که با شروع تایم آن هر کدوم از این عکس ها انتخاب می شن و توضیحاتی در مورد اونها داده می شه

حجم صفحه هم زیاد نیست . یعنی صفحه دیگه ای دارم که شامل انیمیشن های بیشتری هست و مشکلی نداره

اما این صفحه با اینکه فقط 6 انیمیشن داره تایمرش جا می مونه ... مثلا هر 2 ثانیه ای یهو جلو می ره و یا چند ثانیه ثابت می مونه

من از تایمرهای تولباکس ویژوال استدیو 2008 استفاده کردم ...

مشکل چیه ؟

آیا لازمه از تردها استفاده کنم؟

اگه ممکنه توضیح بدین .. ممنون

daniel_0247
پنج شنبه 16 مهر 1388, 18:16 عصر
سلام
می تونید از BackGroundWorker ها استفاده کنید .

bahar_engineer
پنج شنبه 16 مهر 1388, 18:39 عصر
ممکنه در موردشون بیشتر توضیح بدین

daniel_0247
پنج شنبه 16 مهر 1388, 18:57 عصر
یه مقاله در مورد BackGroundWorker ها نوشتم ، که امیدوارم کارتون رو راه بندازه !

دانلود (http://www.prohardcoding.blogfa.com/post-6.aspx)

bahar_engineer
شنبه 18 مهر 1388, 11:32 صبح
من مقاله رو خوندم ...

صفحه من به این شکله که 6 انیمیشن در اون قرار داره که با لود صفحه اونها نمایش داده می شن البته توی picturebox گذاشتمشون و با کدنویسی اونها رو لود نمی کنم.

و یک تایمر دارم ... که شرط هایی رو چک می کنم اگه عدد تایمر شد 10 picturbox1 مشخص بشه مثلا boreder بخوره ...

اگه تایمر رسید به 20 انیمیشن دوم و ... به همین ترتیب

حالا این کدها نمی دونم به چه دلیل سرعت تایمر رو می گیره یعنی همونطور که گفتم تایمر یا جا می مونه یا سریع تر از حالت عادی پیش می ره و چون می خوام طبق تایمر روی برنامه صوت بذارم نمی شه از این مورد چشم پوشی کرد

حالا این کدهای شرطی داخل تایمر رو توی backgroundworker گذاشتم و در رویداد runcomplete نوشتم یه پیغام بده ... اما تا برنامه بالا می آد پیغامو می ده...

کدشو می ذارم اگه ممکنه بگین کجا باید استفاده کنم این backgroundworker رو.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Media;
using System.Collections;
using System.Threading;



namespace childfriend
{
public partial class jungle : Form
{
private int sec = 0, ext=0;
private Point loc1, loc2, loc3, loc4, loc5, loc6;
Cat mycat = new Cat();


public jungle()
{
InitializeComponent();
}

//don't let close form with ALT+F4
protected override System.Boolean ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if ((msg.Msg == 0x104) && (((int)msg.LParam) == 0x203e0001))
return true;
return false;
}

private void jungle_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
mycat.a = 903;
mycat.b = 110;
timer1.Enabled = true;
pictureBox7.Visible = false;

// pictureBox1.Image = Image.FromFile(Application.StartupPath + @"\pic\animalteach\anim (9).png");//kharchang
// pictureBox2.Image = Image.FromFile(Application.StartupPath + @"\pic\animalteach\anim (11).png");//panda
// pictureBox3.Image = Image.FromFile(Application.StartupPath + @"\pic\animalteach\anim (2).png");//sag
// pictureBox4.Image = Image.FromFile(Application.StartupPath + @"\pic\animalteach\anim (4).png");//mahi
// pictureBox5.Image = Image.FromFile(Application.StartupPath + @"\pic\animalteach\anim (27).png");//gorbe
// pictureBox6.Image = Image.FromFile(Application.StartupPath + @"\pic\animalteach\anim (1).png");//gav
loc1.X = 591;
loc1.Y = 577;
pictureBox1.Location = loc1;
loc2.X = 439;
loc2.Y = 260;
pictureBox2.Location = loc2;
loc3.X = 192;
loc3.Y = 557;
pictureBox3.Location = loc3;
loc4.X = 774;
loc4.Y = 623;
pictureBox4.Location = loc4;
loc5.X = 793;
loc5.Y = 324;
pictureBox5.Location = loc5;
loc6.X = 62;
loc6.Y = 314;
pictureBox6.Location = loc6;


}

private void timer1_Tick(object sender, EventArgs e)
{
sec += 1;
timer1.Interval = 1000;
label1.Text = sec.ToString();

}

private void transparentpic1_Click(object sender, EventArgs e)
{
transparentpic1.Visible = false;
this.Enabled = false;
ext = 0;
timer2.Enabled = true;
mycat.CatExit();
sec = 0;
timer1.Enabled = false;
}

private void hotspot1_Click(object sender, EventArgs e)
{

}

private void hotspot2_Click(object sender, EventArgs e)
{

}

private void backgroundWorker1_DoWork_1(object sender, DoWorkEventArgs e)
{
if (sec > 10 && sec < 20)//kharchang
{
// pictureBox1.Image = Image.FromFile(Application.StartupPath + @"\pic\animalbig\16.gif");
// loc1.X = 575;
// loc1.Y = 567;
// pictureBox1.Location = loc1;
// pictureBox1.BorderStyle = BorderStyle.FixedSingle;
pictureBox7.Visible = true;
loc1.X = 610;
loc1.Y = 639;
pictureBox7.Location = loc1;
string mypath = Application.StartupPath + @"\music\no.wav";
SoundPlayer simpleSound = new SoundPlayer(mypath);
simpleSound.Play();

}
if (sec > 20 && sec < 30)//panda
{
// pictureBox2.Image = Image.FromFile(Application.StartupPath + @"\pic\animalbig\20.gif");
// loc2.X = 453;
// loc2.Y = 225;
// pictureBox2.Location = loc2;
// pictureBox2.BorderStyle = BorderStyle.FixedSingle;
pictureBox7.Visible = true;
loc1.X = 462;
loc1.Y = 396;
pictureBox7.Location = loc1;
}
if (sec > 30 && sec < 40)//sag
{
// pictureBox3.Image = Image.FromFile(Application.StartupPath + @"\pic\animalbig\6.gif");
// loc3.X = 165;
// loc3.Y = 526;
// pictureBox3.Location = loc3;
// pictureBox3.BorderStyle = BorderStyle.FixedSingle;
pictureBox7.Visible = true;
loc1.X = 200;
loc1.Y = 659;
pictureBox7.Location = loc1;
}
if (sec > 40 && sec < 50)//mahi
{
// pictureBox4.Image = Image.FromFile(Application.StartupPath + @"\pic\animalbig\10.gif");
// loc4.X = 774;
// loc4.Y = 623;
// pictureBox4.Location = loc4;
// pictureBox4.BorderStyle = BorderStyle.FixedSingle;
pictureBox7.Visible = true;
loc1.X = 891;
loc1.Y = 684;
pictureBox7.Location = loc1;
}
if (sec > 50 && sec < 60)//gorbe
{
// pictureBox5.Image = Image.FromFile(Application.StartupPath + @"\pic\animalbig\3.gif");
// loc5.X = 774;
// loc5.Y = 291;
// pictureBox5.Location = loc5;
// pictureBox5.BorderStyle = BorderStyle.FixedSingle;
pictureBox7.Visible = true;
loc1.X = 810;
loc1.Y = 421;
pictureBox7.Location = loc1;
}
if (sec > 60 && sec < 70)//gav
{
// pictureBox6.Image = Image.FromFile(Application.StartupPath + @"\pic\animalbig\5.gif");
// loc6.X = 48;
// loc6.Y = 272;
// pictureBox6.Location = loc6;
// pictureBox6.BorderStyle = BorderStyle.FixedSingle;
pictureBox7.Visible = true;
loc1.X = 90;
loc1.Y = 447;
pictureBox7.Location = loc1;
}

if (sec == 70)
{
sec = 0;
timer1.Enabled = false;
this.Hide();
animalquery animq = new animalquery();
animq.Tag = this;
animq.ShowDialog();
}
}

private void timer2_Tick(object sender, EventArgs e)
{
ext += 1;
timer2.Interval = 1000;
backgroundWorker1.RunWorkerAsync();
if (ext > 2)
{
mycat.MyCat.Hide();
timer2.Enabled = false;
this.Enabled = true;
transparentpic1.Visible = true;
this.Close();
foreach (Form teaching in Application.OpenForms)
{
if (teaching is teach)
Application.OpenForms["teach"].Show();
}
}
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("complete");
}
}
}


این کد کل صفحه هست... ممنون می شم اشکالشو بگین

در ضمن این picturebox7 یه انیمیشن هست که یک فلشه که به عکسی که اون لحظه انتخاب شده اشاره می کنه . به جای همون border که گفتم استفاده می شه... یعنی مشخص می کنه که الان کدوم عکس می خواد معرفی بشه و صوت روی اون پخش بشه... برای همین با تغییر عدد تایمر ، محل این انیمیشن تغییر می کنه.

daniel_0247
شنبه 18 مهر 1388, 15:42 عصر
سلام
دوست عزیز شما می تونی برای اینکه عکس یا انیمیشن به ترتیب در BackGroundWorker بیاد
ابتدا باید آدرس فایل ها رو در آرایه بریزی :
[
string[] str = {"url"}

و بعد در رویداد Do_Work

for (int i = 0; i < str.Length; i++)
{
System.Threading.Thread.Sleep(5000);
pictureBox1.Image = Image.FromFile(str[i]);


}

شما می تونید زمان ترید رو تغییر بدید!

موفق باشید .
___________________

My Blog (http://prohardcoding.blogfa.com/)