C# الاتصالات التسلسلية - فقدت البيانات المستلمة
-
03-10-2019 - |
سؤال
يتم فقدان البيانات المستلمة في تطبيق C# الخاص بي بسبب اكتساب مجموعة Collector ، بدلاً من إلحاقها.
char[] pUartData_c;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
pUartData_c = serialPort1.ReadExisting().ToCharArray();
bUartDataReady_c = true;
}
catch ( System.Exception ex )
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
في هذا المثال pUartData_c
يتم كتابة مبالغ فيه في كل مرة يتم فيها تلقي بيانات جديدة. في بعض الأنظمة ، ليست هذه مشكلة لأن البيانات تأتي بسرعة كافية. ومع ذلك ، في بيانات الأنظمة الأخرى في المخزن المؤقت الاستقبال غير مكتمل. كيف يمكنني إلحاق البيانات المستلمة إلى pUartData_c
, ، بدلا من الإفراط في كتابة ذلك. أنا أستخدم Microsoft Visual C# 2008 Express Edition. شكرًا.
المحلول
private SerialPort sp;
private List<byte> byte_buffer = new List<byte>();
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte_buffer.Clear();
while (sp.BytesToRead > 0)
{
byte_buffer.Add((byte)sp.ReadByte());
}
}
نصائح أخرى
إذا pUartData
كان List<char>
يمكنك إضافة chars الواردة إلى القائمة مع .AddRange()
.
اضطررت إلى قراءة هذا السؤال 2-3 مرات قبل أن أعرف أن هذا مجرد مشكلة إلحاق الصفيف في C#. (في البداية اعتقدت أن هذا كان خطأ في التواصل التسلسلي جاد ... لول)
موافق،
يمكنك استخدام أ List<>
أو ArrayList
فئة للحفاظ على البيانات الديناميكية. أي إضافة الإزالة وما إلى ذلك ، لذلك في كل مرة تستقبل فيها البيانات من المسلسل ، ما عليك سوى إضافتها إلى القائمة.