PDA

View Full Version : سوال: خطا the i/o operation has been aborted در خواندن از پورت سریال



elahe1393
شنبه 03 آبان 1393, 12:38 عصر
سلام
دستگاهی از طریق پورت سریال با برنامه من در ارتباط است من بسته های ارسالی از طرف دستگاه رو بصورت موازی با برنامه دائما دریافت می کنم کد دریافت داده بصورت زیر است
private string ReceiveData()
{
try
{
string receiveData;
receiveData = serialPort.ReadLine();
return receiveData;
}
catch
{
MessageBox.Show("مشکلی در دریافت اطلاعات بوجود آمده است \nلطفا از باز بودن پورت مطمئن شده و مجددا امتحان کنید", "دریافت اطلاعات از دستگاه");
}
return null;
}
در جین اجرای برنامه با خطای زیر مواجه میشم
the i/o operation has been aborted because of either a thread exit or an application request
با جستجویی که در گوگل انجام دادم فهمیدم این خطای شایعی هست که هنگام خواندن از پورت سریال مخصوصا از طریق فراخوانی این تابع serialPort.ReadLine اتفاق میفته ولی راه حل این مشکل رو پیدا نکردم من نیاز دارم بسته هامو از طریق همین ReadLine بخونم تا تفکیک سازی درستی انجام بدم لطفا منو راهنمایی کنید که برای حل این مشکل چه کنم اگر بخوام وقتی به این خطا رسیدم نادیدیده بگیره و برنامه ادامه پیدا کنه چه کنم تو try catch تابع خواندنم چه تغییری بدم؟ چه کنم؟

elahe1393
شنبه 03 آبان 1393, 13:36 عصر
تا حالا کسی با این خطا مواجه شده لطفا راهنمایی نمایید

elahe1393
شنبه 03 آبان 1393, 14:13 عصر
از تابع ReceiveData() تو یه بخشی که بعنوان thread موازی thread اصلی برنامه اجرا میشود استفاده می شود نام این thread، threadRead هستش هیچ کجای دیگر از این تابع استفاده نمیشود حالا میخوام تو کد این تابع که try catch داره طوری کد بنویسم که اگر این خطا رخ داد thread کاری به خطا نداشته باشه و این روند ادامه پیدا کنه
اینجوری تغییرش دادم ولی فکر کنم اشتباست
private string ReceiveData()
{
try
{
string receiveData;
receiveData = serialPort.ReadLine();
return receiveData;
}
catch
{
threadRead.Invoke();
}
return null;
}

elahe1393
یک شنبه 04 آبان 1393, 08:26 صبح
تا حالا کسی با این خطا مواجه نشده تا تجربه شو در اختیار قرار بده منو راهنمایی کنه؟

elyas_delshadnbe
یک شنبه 04 آبان 1393, 08:41 صبح
مطمئني جاي ديگه خراب كاري نكردي؟چون تا حالا كه مثه اينكه اين قسمت كار ميكرده

elahe1393
یک شنبه 04 آبان 1393, 09:19 صبح
کلا سیستمو برای اینکه موازی سازی انجام بشه و بتونم همزمان روی نمودار رسمش کنم کمی تغییر دادم و مطمئنم تغییراتم درسته این خطا یه خطای رایجی هم هست ولی روش حلشو پیدا نکردم هرجا یه چیزی گفته شده الان میخوام بدونم تو برنامه من چطوری قابل حله؟!!!!

elahe1393
یک شنبه 04 آبان 1393, 13:12 عصر
متوجه مشکل شدم دو تا thread دارم یکی مقادیری را دریافت میکنه میریزه تو یه متغیر و thread اصلی این متغیر رو بررسی و پردازش میکنه یه زمانهایی هر دو thread همزمان میخوان به متغیر دسترسی پیدا کنن به همین خاطر دچار تداخل میشه
حالا مشکل جدیدی که دارم اینه که من میخوام در یه جایی از thread اصلی کدی بنویسم که thread فرعی دیگه به کارش ادامه نده
من thread فرعی رو threadRead.BeginInvoke(null, null); اینجوری شروع کردم فکر کردم با threadRead.EndInvoke(ar); که ar مقداری از نوع IAsyncResult هست که مقدارش برابر نتیجه threadRead.BeginInvoke(null, null); هست ولی گویا اشتباست چون جواب نگرفتم و با رسیدن به این کد برنامه هنگ میکنه من چطوری میتونم این thread رو تو thread اصلی متوقف کنم؟

vahidganji
یک شنبه 04 آبان 1393, 16:31 عصر
میشه یه کمکی هم به این تاپیک کنین:متفکر:
http://barnamenevis.org/showthread.php?473688-%D8%AE%D8%B7%D8%A7-%D8%AF%D8%B1-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87&p=2123798#post2123798