Mám winform aplikaci, která čte/zapisuje data z/do sériovky. Jak správně synchronizovat přístup k členům SendData a ReceivedData? ve Form1:
CommunicationClass Komunikace = new CommunicationClass();
Komunikace.SendData.val1 = 3;
byte temp = Komunikace.ReceivedData.cislo1;
public class CommunicationClass
{
public struct DataSendStruct
{
public byte val1; // bude hodne clenu
}
public struct DataRecvStruct
{
public byte cislo1; // bude hodne clenu
}
private SerialPort Port = new SerialPort();
private EventWaitHandle DataCompleted = new AutoResetEvent(false);
public DataSendStruct SendData;
public DataRecvStruct ReceivedData;
public CommunicationClass()
{
Port.DataReceived += new SerialDataReceivedEventHandler(Port_DataReceived);
new Thread(SendingData).Start();
}
private void SendingData()
{
while (true)
{
byte[] buffer = new byte[10];
buffer[0] = SendData.val1;// prevod dat do bufferu
Port.Write(buffer, 0, buffer.Length); // poslat
DataCompleted.WaitOne(); // cekat
}
}
private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[Port.BytesToRead];
Port.Read(buffer, 0, buffer.Length);//nacist dostupna data
// if (data jsou vsechna nebo komunikacni problem) ...
DataCompleted.Set(); // signalizace, ze je vse nacteno
ReceivedData.cislo1 = buffer[0]; // prevod dat do promennych
}
}
|