PDA

View Full Version : سوال در مورد Thread



sgh_programer
چهارشنبه 29 آذر 1391, 11:02 صبح
سلام دوستان

فرض بر این که دوتا فرم داریم
من میخوام مدت زمانی که فرم دوم نمایش داده میشه یه ساعت شنی (لطفا منتظر بمانید) نمایش داده بشه و زمانی هم که اون فرم نمایش داده شد ساعت شنی مخفی بشه

یه نمونه برنامه گذاشتم

ضمنا دوستان توی این برنامه ای که گذاشتم خاصیت ShowDialog مربوط به فرم کار نمیکند. اینوچه چوری حل کنم

منتظر راهنماییتون هستم

morteza271
چهارشنبه 29 آذر 1391, 11:37 صبح
مشکل اول (بعد از لود فرم 2 تصویر مخفی بشه) رو میتونید به روش زیر برطرف کنید.
1- در فرم 2 یک متغیر از نوع فرم1 به صورت عمومی تعریف کنید به صورت زیر :
public Form1 frm1Instacne;
public Form2()
{
InitializeComponent();
}
2- بعد در فرم 1 ابتدا خاصیت Modifires تصویر رو برابر public قرار بدین.
و تابع نمایش فرم 2 رو به صورت زیر تغییر بدین :
public void Show_Form2()
{
Form2 f2 = new Form2();
f2.frm1Instacne = this;
f2.ShowDialog();
}
3- و بعد در فرم 2 در رویداد لود فرم کد زیر رو بذارین :
private void Form2_Load(object sender, EventArgs e)
{
frm1Instacne.pictureBox1.Visible = true;
int b = 1;
for (int i = 1; i < 50000; i++)
{
b *= i;
textBox1.Text = "";
textBox1.Text = b.ToString();
}
frm1Instacne.pictureBox1.Visible = false;
}

اینطوری این مشکل برطرف میشه.
ولی در مورد مشکل دوم (ShowDialog) فعلا چیزی به نظرم نمیرسه!! دلیلش اینکه در تردی کاملا جدا باز میشه به همین خاطر اصلا با فرم 1 در ارتباط نیست و حتی وقتی فرم 1 (فرم اصلی برنامه) رو میبنیدیم فرم2 بسته نمیشه!!

ولی کلا اگه روشتون رو عوض کنید احتمالا مشکل برطرف شه:
به این صورت که یه فرم دیگه درست کنید و اون تصویر رو داخل اون بذارین.
بعد به جای اینکه اون تصویر رو مخفی و نمایش بدین اون فرم رو بار کنید.
فکر کنم اینطوری بهتر باشه و مشکلتون حل شه...

sgh_programer
چهارشنبه 29 آذر 1391, 11:51 صبح
من این کار رو کردم اما خطا داد
96917
اگه امکانش هست تغییرات رو روی همون برنامه که گذاشتم اعمال کنید و ضمیمه کنید

morteza271
چهارشنبه 29 آذر 1391, 11:58 صبح
شرمنده اشتباه کردم!!!!!!!!
اینم همون پروژه خودتون :
96918
البته من VS2010 دارم و تبدیلش کردم به همین خاطر احتمالا نمیتونین بازش کنین.
اگه نتونستین رویداد لود فرم 2 رو به صورت زیر قرار بدین :
private void Form2_Load(object sender, EventArgs e)
{
int b = 1;
for (int i = 1; i < 50000; i++)
{
b *= i;
textBox1.Text = "";
textBox1.Text = b.ToString();
}
frm1Instacne.pictureBox1.Visible = false;
}

Y_Safaiee
چهارشنبه 29 آذر 1391, 15:55 عصر
سلام دوست من

اینم یه سمپل کد برای شما:


using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls=false;
}

private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
lbl_PleaseWait.Visible = true;
lbl_PleaseWait.Text = "Please Wait";
textBox1.Enabled = false;
button1.Enabled = false;
for (int a = 0; a < 500; a++)
{
textBox1.Text += a.ToString() + ",";
}
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
lbl_PleaseWait.Visible = false;
textBox1.Enabled = true;
button1.Enabled = true;
}


}
}


موفق باشی
بایت بایت