Die Benutzeroberfläche friert während der Datenanalyse durch die asynchronisierende Funktion ein.C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Die Benutzeroberfläche friert während der Datenanalyse durch die asynchronisierende Funktion ein.

Post by Anonymous »

Ich erhalte eine Reihe von seriellen Daten von einem Remote -Gerät pro 2,5 ms und speichere sie in einer Warteschlange. Ich dequeue und speichere den Inhalt in einem Textfeld. Das Problem ist, während während der Analyse der Benutzeroberfläche während des Analyse von Daten gefriert wurde. Ich vermute, dass das Einfrieren der Datei aufgrund des regelmäßigen Problems der Datei- oder Datei -Indexierung erfolgt. Gibt es eine andere Möglichkeit, die Daten zu analysieren, ohne die Daten in einer Datei zu speichern?

Code: Select all

21 0F 01 7F 00 07 B0 FB C4 40 0D 46 06 04 FA 7F 0A C9 96 01 00 00 FF 03 23
24 0F 05 7E 0F 00 00 06 02 02 01 00 00 23 03 01 02 00 00 00 01 01 00 01 01 02 23
5E 01 01 8B 67 EE 03 76 10 02 0F DF 09 02 1F 12 23 3E DC 0E D3 39 9E 17 10 12 21
40 46 FA 73 10 01 03 01 09 01 01 07 41 20 00 F7 91 01 DE 7F EC D6 8E 0B ED 96 AE 2B 23
5E 5A D1 CF 01 73 A3 14 11 00 71 02 8C 04 28 01 00 07 00 5C FF DF 11 01 00 03 24
< /code>
Hier sind die ersten und letzten Daten jedes Datensatzes Kopf und Schwanz.void SerialOnReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
byte[] data = new byte[Serial.BytesToRead];
Console.WriteLine("Length of received data"+ data.Length);

Serial.Read(data, 0, data.Length);
s = Encoding.GetEncoding("ISO-8859-1").GetString(data);
_queue.Enqueue(s);

Array.Clear(data, 0, data.Length);
}
< /code>
Ausgabemittel -Update -Abschnitt des Codes < /p>
private void ThreadProc()
{
while (true)
{
string inData = _queue.Dequeue();
this.Invoke(new UPDATE_OUTPUT_TEXT(UpdateOutputText), inData);
this.Invoke(new Read_File_Data(ReadFileData));
}
}

public void UpdateOutputText(String Str)
{
int n = Str.Length;
byte[] byt = new byte[n];

for (int k = 0; k < n; k++)
{
byt[k] = (byte)Str[k];
tBoxReceive.Text += (byte)Str[k];
tBoxReceive.ScrollToCaret();
}

String hexval = BitConverter.ToString(byt).Replace("-", "");

Console.WriteLine("The original received value before storing " + hexval);
File.AppendAllText("buffer1.txt", hexval);
}
< /code>
Ich warte auf 1 Sek. Vor dem Öffnen und lesen    public async void ReadFileData()
{
await Task.Delay(1000);
BinaryReader reader = new BinaryReader(new FileStream("buffer1.txt",FileMode.Open, FileAccess.Read, FileShare.None));
reader.BaseStream.Position = offsetval;     // The offset you are reading the data from
byte[] data = reader.ReadBytes(0x10E); // Read 270 (total number of data received every 2.5ms) bytes into an array
Console.WriteLine("Position of stream" + reader.BaseStream.Position);
var strnew = System.Text.Encoding.Default.GetString(data,0,data.Length);
Console.WriteLine("Converted value " + strnew);
offsetval = reader.BaseStream.Position;
Console.WriteLine("offset value " + offsetval);
reader.Close();

string formattedHexString = string.Join("", Enumerable.Range(0, strnew.Length)
.Where(z => z % 2 == 0)
.Select(z => "0x" + strnew.Substring(z, 2) + ", ")
.ToArray()).Trim().TrimEnd(',');
Console.WriteLine(formattedHexString);

string[] namesArray = formattedHexString.Split(',');
byte[] abc = new byte[namesArray.Length];

for (int i = 0; i

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post