私は組み込みドメインからのもので、デバイス用のGUIを作成する必要があります。私はCでデバイスのファームウェアを書いて、Visual C#Windowsフォームアプリケーションを使ってGUIアプリケーションを作っています。デバイスが100msでシリアルポートにデータを送信していますが、winformsでデータを受信しようとしています。私はそれを受信するためのC#コードを以下の書かれているシリアルデータを受信中にWindowsフォームアプリケーションがハングアップする
10Q20Q30Q40Q50Q60Q70Q80Q90Q100Q110Q120Q130Q140Q150Q
:
データ。
public Form1()
{
InitializeComponent();
//Using data receive event handler to receive data
serialPort1.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
}
はその後comPort_DataReceived
に私は最終的に私は、データを読み取り、String data
にそれを保存しています
void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Read();
}
delegate void Callbackmessage();
void Read()
{
if (this.InvokeRequired)
{
Callbackmessage abc = new Callbackmessage(Read);
this.Invoke(abc);
}
else
{
String data = serialPort1.ReadLine();
}
)(Readを呼び出しています。アプリケーションは正常に動作していますが、ボタンが1秒後に応答しているようにハングしています。私がこの行String data = serialPort1.ReadLine();
にコメントすると、アプリケーションはスムーズに動作します。アプリケーションがぶら下がっている理由私はシリアルポートからデータを受信する他の方法を知らない。助けてください。ありがとう。
メインUIスレッドでI/O操作を行っているので、時間がかかります。タスクでこの操作を行うことを検討してください(https://msdn.microsoft.com/en-gb/library/system.threading.tasks.task(v=vs.110).aspx) – auburg
@auburgありがとう私は間違いありませんこれを試して。実際に私はちょうどVisual C#を学び始めたので、私は学ぶことができるようにリソースを探しています – user007