PDA

View Full Version : سوال: كمك درباره thread



aligilani1986
یک شنبه 06 بهمن 1387, 09:22 صبح
سلام.

من دو تا فرم دارم كه توي فرم 1 ميخواهم تردي بنويسم كه ديتا گريد موجود در فرم دوم را از يك جدول فرضي پر كند.

آيا اين امكان وجود دارد؟

kiosksoft
یک شنبه 06 بهمن 1387, 16:23 عصر
دوست عزیز

این امکان وجود داره , ترد برای اجرای دستورات بصورت همزمان میباشد , اما این کار دلیل نداره که حتما ترد باشه , بگید دقیقا چی میخواین.

Mehdi Asgari
یک شنبه 06 بهمن 1387, 16:47 عصر
توجه: مدت هاست کد دات نت نزدم و در عرصۀ Windows Forms هم مبتدی ام و ممکنه کدم غلط باشه یا روش های بهتری وجود داشته باشن، ولی کد زیر که اولین چیزی بود که به ذهنم رسید درست کار کرد. (شاید در سناریو های پیچیده تر خطا بده. دسترسی به یک کنترل از یک thread دیگه ، اگر هم موقع Run خطا نده ، موقع دیباگ کردن حتما خطای Cross Thread میده ، ولی کد زیر اصلا خطا نداد چه موقع اجرا و چه موقع دیباگ)




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

Form2 frm2 = new Form2();
DataSet ds = new DataSet();
SqlConnection connection = new SqlConnection("server=(local)\\SQLEXPRESS;database=db1;uid=sa;pwd =123");

private void button1_Click(object sender, EventArgs e)
{
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Table1", connection);
adapter.Fill(ds);
ThreadStart thread_start = new ThreadStart(MyFunction);
Thread thread = new Thread(thread_start);
IntPtr ip = frm2.Handle; // force the creation of Handle
thread.Start();
Action action = delegate { frm2.Show(); };
frm2.Invoke(action);
}

void MyFunction()
{
Action action = delegate { frm2.dataGridView1.DataSource = ds.Tables[0]; };
frm2.Invoke(action);
}
}

aligilani1986
یک شنبه 06 بهمن 1387, 21:14 عصر
دوست عزیز

این امکان وجود داره , ترد برای اجرای دستورات بصورت همزمان میباشد , اما این کار دلیل نداره که حتما ترد باشه , بگید دقیقا چی میخواین.

دليل اينكار من اينه كه نميخواهم وقتي فرم 2 باز ميشه دير باز بشه و تمام زمان مورد نظر در هنگام لود برنامه اصلي باشد.

اين قابليت رو بيشتر براي شبكه نياز دارم.

اگه شما نظري درباره اين دليل داريد ميشه مطرح كنيد؟