حامد فراست
چهارشنبه 16 اردیبهشت 1388, 13:05 عصر
با سلام
من برا ی دریافت داده از سریال پورت از یک صف بعنوان بافر استفاده میکنم .وقتی این صف رو درون سازنده کلاس مقدار دهی میکنم برنامه با تاخیر، داده ها رو به من نشان میده و هر چی زمان بیشتری میگذره این تاخیر بیشتر میشه. اینم کدشه که درون سازنده میگذارمش:
receivedbyte = new Queue(Int16.MaxValue);
این جا داده توسط سریال پورت دریافت و با فر میشه
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int count = serialPort1.BytesToRead;
byte[] receive = new byte[count];
serialPort1.Read(receive, 0, count);
foreach (byte data in receive)
{
receivedbyte.Enqueue(data);
}
try
{
ReceiveFrameThread.Resume();
}
catch { }
}
در این قسمت داده های بافر شده مورد پردازش میشود
void FrameProcess()
{
while (permission)
{
bool stop = false;
byte[] tempX = new byte[7];
try
{
do
{
if (receivedbyte.Count > 7)
{
tempX[0] = (byte)receivedbyte.Dequeue();
}
} while (tempX[0] != 0xfe&&!stop) ;
stop = true;
for (byte i = 1; i <= 6; i++)
{
if (receivedbyte.Count > 0)
tempX[i] = (byte)receivedbyte.Dequeue();
}
if (permission)
ReceiveFrameThread.Suspend();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
و در این قسمت هم thread مقدار دهی میشود
void Start()
{
serialPort1.Open();
ReceiveFrameThread = new Thread(new ThreadStart(FrameProcess));
permission = true;
ReceiveFrameThread.Start();
من برا ی دریافت داده از سریال پورت از یک صف بعنوان بافر استفاده میکنم .وقتی این صف رو درون سازنده کلاس مقدار دهی میکنم برنامه با تاخیر، داده ها رو به من نشان میده و هر چی زمان بیشتری میگذره این تاخیر بیشتر میشه. اینم کدشه که درون سازنده میگذارمش:
receivedbyte = new Queue(Int16.MaxValue);
این جا داده توسط سریال پورت دریافت و با فر میشه
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int count = serialPort1.BytesToRead;
byte[] receive = new byte[count];
serialPort1.Read(receive, 0, count);
foreach (byte data in receive)
{
receivedbyte.Enqueue(data);
}
try
{
ReceiveFrameThread.Resume();
}
catch { }
}
در این قسمت داده های بافر شده مورد پردازش میشود
void FrameProcess()
{
while (permission)
{
bool stop = false;
byte[] tempX = new byte[7];
try
{
do
{
if (receivedbyte.Count > 7)
{
tempX[0] = (byte)receivedbyte.Dequeue();
}
} while (tempX[0] != 0xfe&&!stop) ;
stop = true;
for (byte i = 1; i <= 6; i++)
{
if (receivedbyte.Count > 0)
tempX[i] = (byte)receivedbyte.Dequeue();
}
if (permission)
ReceiveFrameThread.Suspend();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
و در این قسمت هم thread مقدار دهی میشود
void Start()
{
serialPort1.Open();
ReceiveFrameThread = new Thread(new ThreadStart(FrameProcess));
permission = true;
ReceiveFrameThread.Start();