C# الاتصالات التسلسلية - فقدت البيانات المستلمة

StackOverflow https://stackoverflow.com/questions/2782356

  •  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 فئة للحفاظ على البيانات الديناميكية. أي إضافة الإزالة وما إلى ذلك ، لذلك في كل مرة تستقبل فيها البيانات من المسلسل ، ما عليك سوى إضافتها إلى القائمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top