PDA

View Full Version : سوال: ارسال داده حجیم به برنامه به کمک Thread دوم



emad4000
جمعه 28 شهریور 1393, 16:27 عصر
سلام
من یک کامپوننت نوشتم که مدام داده دریافت می کنه و بعد از پروسس خاصی اونا رو به شکل خاصی نمایش میده
این کامپوننت رو کامپایل کردم و به استفاده کننده دادم
MyComponent cmp = new MyComponent();
cmp.addData(...);

حالا مسئله ای که وجود داره اینه که استفاده کننده گاهاً حجم عظیم داده ای رو به کامپوننت می فرسته و برنامه تو مدت چندثانیه ای که داده داره وارد میشه قفل می کنه
من اگر داخل تابع اصلی از کامپومننتم یه Thread بسازم و از اونجا داده ها رو توسط اون Thread وارد کنم هیچ مشکلی حل نمیشه، چون به هرحال تا زمان ورود داده به داخل کامپوننت همون قفل شدن رو داریم.
من برای حل این مشکل یه نمونه کد خارج از کامپوننت نوشتم که یه Thread می سازه و داخل این Thread اطلاعات رو به برنامه می فرسته
اینجوری هیچ مشکلی پیش نمیاد و داده ها یک به یک که وارد میشن پردازش و نمایش داده میشن

Thread t = new Thread(myFunction);
t.start();
...
public void myFunction()
{
MyComponent cmp = new MyComponent();
cmp.addData(...);
}


یعنی خود استفاده کننده باید این مسئله رو مدیریت کنه.
ولی نمونه برنامه هایی رو دیدم که مثل کامپوننت من کار می کنن، ولی از بیرون بدون ساخت نخ میشه بهشون داده پاس کرد و اونا بدون هیچ مشکلی کار می کنن
می خواستم بپرسم نظر شما چیه و من چطور می تونم این کار رو انجام بدم؟؟؟

Mahmoud.Afrad
جمعه 28 شهریور 1393, 19:02 عصر
من اگر داخل تابع اصلی از کامپومننتم یه Thread بسازم و از اونجا داده ها رو توسط اون Thread وارد کنم هیچ مشکلی حل نمیشه، چون به هرحال تا زمان ورود داده به داخل کامپوننت همون قفل شدن رو داریم.


نمونه کد بزارید تا تست کنیم.

emad4000
جمعه 28 شهریور 1393, 22:03 عصر
نمونه کد بزارید تا تست کنیم.

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


class MyComponent
{
private int[] finalArray;

public void addData(int[] array)
{
Thread t = new Thread(addDataFinal);
t.start(array);
}

private void addDataFinal(int[] array)
{
// process on array
finalArray = array;
// process on final array
}

}


تو این کد به هرحال داده اول باید وارد کامپوننت بشه، بعد وارد Thread بشه، بنابراین Thread اینجا کاملاً بی فایده است.

emad4000
چهارشنبه 16 مهر 1393, 20:26 عصر
دوستان، کسی جواب نمیده ؟!؟!؟ منتظرم هاااا :افسرده:

elec60
چهارشنبه 16 مهر 1393, 22:02 عصر
بنظرم متد AddData رو به صورت آسنکرون بنویس. مثل خیلی از متدهای دات نت که با Begin شروع میشن

emad4000
چهارشنبه 16 مهر 1393, 23:15 عصر
بنظرم متد AddData رو به صورت آسنکرون بنویس. مثل خیلی از متدهای دات نت که با Begin شروع میشن

میشه بیشتر توضیح بدین؟؟؟؟

emad4000
جمعه 02 آبان 1393, 16:04 عصر
بنظرم متد AddData رو به صورت آسنکرون بنویس. مثل خیلی از متدهای دات نت که با Begin شروع میشن

ببخشید میشه بیشتر در این مورد توضیح بدهید؟ منتظرم ...
با تشکر