PDA

View Full Version : فعال یاغیرفعال کردن اشیائ روی فرم



hadis shaeidi
دوشنبه 30 آبان 1390, 17:49 عصر
من یه برنامه تحت شبکه دارم که متشکل ازیک برنامه سرورویک برنامه کلاینت است .حالامیخوام ازطریق سرورکلاینت هاروفعال یاغیرفعال کنم که اومدم تمام اشیاروی فرم سمت کلاینت روروی یک panelگذاشتم که ازسمت سروربهcaseازبرنامه کلاینت اشاره میکنم که داخل اون caseاین دستوررودارم:برافعال یاغیرفعال کردن اشیای که روی panelقراردارند
case "DISABLE":
panel1.Enabled = false;
break;
case "ENABLE":
panel1.Enabled = true;
break;
حالااین کاربدرستی انجام میشه ولی یه خطامیده که بایدokروزدبعدکارفعال یاغیرفعال روانجام میده.این خطاشه:چیکارکنم که این خطارونده؟

System.invalidoperationexception:Cross-Thread operation not valid:Control ‘panel’ accessed from a thread other than the thread it was created on.
وقسمت آخرخطایی که مینویسه اشاره به همین خط هایcaseمیکنه که نوشتم برافعال وغیرفعال.

mmd2009
دوشنبه 30 آبان 1390, 19:11 عصر
با سلام

خطا که مشخصه چیه ولی کد شما کاملا نا مشخص. این خطا تو خیلی از جاها ممکنه اتفاق بیفته ولی ما الان باید روی چی نظر بدیدم که بگیم چیکار باید بکنید که خطا از اونجا اتفاق افتاده( البته مشخه که به panel فرم گیر دادع ) ؟ لطفا کدهای بهتری بذارید یا برنامه ی جدیدی درست بکنید و اون رو بذارید بقیه روش کار بکنن و نظر بدن.

موفق باشید

hadis shaeidi
دوشنبه 30 آبان 1390, 21:56 عصر
ممنونم ازپاسختون
ببینیدمن یه دکمه سمت سرورگذاشتم که بامتدwriteکه براارسال هستش داره به برنامه سمت کلاینت که همون caseهایی که نوشتم اشاره میکنه تااونpanelغیرفعال بشه.این کددکمهdisableسمت سرورهست:
string index = (listViewClients.SelectedItems[0].Text.Substring(0, listViewClients.SelectedItems[0].Text.IndexOf('-')));
clientName = listViewClients.SelectedItems[0].Text;
tempStream = new NetworkStream(((connection)clients[i]).clientSocket);
tempWriter = new BinaryWriter(tempStream);
tempWriter.Write("DISABLE" + ":" + clientName + "," + index.ToString());
دراینجانام clientnameوindexنام وشماره کلاینت هستندکه درلیست سمت سرورقراردارندکه ماان کلاینت موردنظرراازلیست انتخاب میکنیم وسپس دکمهdisableرامیزنیم بدین صورت اشیایی که روی panelهستندغیرفعال میشونداین کارانجام میشه ولی بایک خطا.
درضمنlistviewهم که نوشته شده منظورهمون لیست سمت برنامه سروراست.
DISABLEهم که نوشته داره بهcaseسمت کلاینت اشاره میکنه که بامتدtempwriterنام وشماره کلاینت رومیفرسته.