PDA

View Full Version : سوال: مشکل در استفاده از تابع Thread()



hesam_mahmoodi
شنبه 24 فروردین 1392, 20:04 عصر
Thread t = new Thread(new ThreadStart(Ex));
t.Start();

من با یک الگریتمی به دیتابیس mysql وصل میشم و بعد دریافت اطلاعات اونو توی یک combobox میزارم ولی چون سرعت دیتابیس اینترنتی پایینه مجبورشده از Thread استفاده کنم که یک مشکل دیگه برام پیش اومده!:گیج:،
مشکل من اینه که وقتی دستورات رو توی یک تابع جدا مینویسم و با ThreadStart اون تابع رو اجرا میکنم تابع و دستورات بخوبی اجرا میشن و اطلاعاتو از دیتابیس میگیرن ولی در combobox نمایش داده نمیشه و چند جا گشتم میگفتن باید combobox یا فرم رو رفرش کنی ولی بازم نشد!. لطفا کمک کنید پرژه دانشگاهیه منه یه 15 روز دیگه باید تحویل بدم



private void Ex()
{
TablePublic.TblSecurityQuestion tsq = new TablePublic.TblSecurityQuestion();
DataTable dtSQ = tsq.ShowGetSecurityQuestion();
COMBSecurityQuestion.DataSource = dtSQ;
COMBSecurityQuestionID = new Int16[COMBSecurityQuestion.Items.Count];
for (int i = 0; i < COMBSecurityQuestionID.Length; i++)
COMBSecurityQuestionID[i] = Convert.ToInt16(dtSQ.Rows[i][0]);
}

کامبیز اسدزاده
شنبه 24 فروردین 1392, 21:04 عصر
منم دقیقا همین مشکل کندی سرعت رو دارم ! دوست عزیز میشه لطف کنی بگی شما چطور اطلاعات دیتابیس رو میخونی در داخل Thread ؟

کامبیز اسدزاده
یک شنبه 25 فروردین 1392, 12:11 عصر
بابا یکی یه جواب بده !!! آقای hesam_mahmoodi (http://barnamenevis.org/member.php?179066-hesam_mahmoodi) شما لطف میکنی بگی این عملیات درتابیس رو چطور در Thread استفاده کردی مثالشو بزن من تو اون قسمت موندم !!! منم بررسی کنم ComboBox رو برات حلش کنیم.

Himalaya
یک شنبه 25 فروردین 1392, 12:34 عصر
سلام
به کنترلهایی که تو Thread مثلا A ایجاد شدن (اینجا میشه همون Thread اصلی برنامه)، نمیتونید از طریق Thread های دیگه دسترسی داشته باشید
شیوه ماست مالی > تو Constructor کد زیر رو قرار بدید

CheckForIllegalCrossThreadCalls = false;

راه اصولی تر اینه که از

comboName.InvokeRequired
استفاده کنید

salman_looloo
یک شنبه 25 فروردین 1392, 13:11 عصر
به نظره من اگر که با استفاده از ترد فقط اطلاعات رو بخونی و داخله یک دیتا تیبل بریزی یا دیتا ریدر و بعد اگر اون ابجکت خالی نبود بعد بیایی به کاربر نشونش بدی .