باسلام خدمت دوستان عزیز.
من درحال کار روی برنامه ای تحت دات نت هستم که به طور همزمان به تعدادی پورت سریال متصل میشه و پردازش انجام میده
مشکل من در لحظه دریافت هست. وقتی تمام برد ها در یک لحظه بخوان دیتا برگردونن و من پردازششون کنم وقتی پورت اول در حال خواندن دیتا هست و خب مسلما از
thread.sleep
استفاده کردم ممکنه درهمون بازه زمانی تاخیر.پورت دیگری داره دیتا میفرسه که خب مسلما از دست میره.
برای ارسال من با روش مولتی ترد مشکلاتو حل میکنم اما در لحظه دریافت چون تمام پورت ها به Thread هسته که همون فرم اصلی هست متصل هستند مشکل پیش میاد.
سوالم اینه که آیا میشه serialport.data_recieved Event رو به یک Thread متصل کرد یا اگه نه پیش نهاد شما چیه؟
اینم قطعه کد مربوط به ایونت Data_recieved در هر برد
private void serialPort3_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(200);
try
{
string data = serialPort3.ReadExisting();
this.Invoke(new SetTextDeleg(si_DataReceived), new object[] { data.Trim() + " #Board3#" });
serialPort3.DiscardInBuffer();
}
catch { }
}
private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(200);
try
{
string data = serialPort2.ReadExisting();
this.Invoke(new SetTextDeleg(si_DataReceived), new object[] { data.Trim() + " #Board2#" });
serialPort2.DiscardInBuffer();
}
catch { }
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(200);
try
{
string data = serialPort1.ReadExisting();
this.Invoke(new SetTextDeleg(si_DataReceived), new object[] { data.Trim()+" #Board1#" });
serialPort1.DiscardInBuffer();
}
catch { }
}