我有一個程序每 X 秒報告一次串行 COM 上的文件夾結構的大小。當用戶也通過串行 COM 發送命令時,它還能夠報告文件夾結構中所有文件的列表。例如:用戶每 10 秒獲取一次大小信息,在某些時候他們想知道文件列表。所以他們通過 COM 端口發送一個“1”,然后程序開始報告文件。我遇到的問題是兩個函數不能同時寫入 COM 端口,因此它開始拋出異常。我想做的是讓兩個功能等到另一個完成。這是我的代碼。這是寫入 COM 端口的簡單功能:private void ComWrite(string msg){ ComPort.Write(msg);}我從這兩個功能中調用它:這個報告文件名:private void GetFileNames(){ fileNames = Directory.GetFiles(textBox1.Text, "*.wav", SearchOption.AllDirectories); for (int i = 0; i < fileNames.Length; i++) { ComWrite((fileNames[i] + "\r\n")); }}這是一個計時器并報告文件夾大小:public void OnTimedEvent(object source, ElapsedEventArgs elapsed){ folderSize = DirSize(new DirectoryInfo(textBox1.Text)) / 1000000; string labelText = folderSize.ToString() + "Mb"; label3.Text = labelText; if (checkBox1.Checked) { try { ComWrite(labelText + "\r\n"); label9.Text = labelText; } catch (Exception) { MessageBox.Show("Please Open COMPORT before sending command"); } }}我怎樣才能實現異步函數,或者其他一些阻止它們相互摔倒的方法?編輯:請求的代碼。這是在表單加載時設置 COM 端口。 private void Form1_Load(object sender, EventArgs e) { label5.Text = "Idle"; ComPort.BaudRate = Convert.ToInt32("9600"); ComPort.DataBits = Convert.ToInt16("8"); ComPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "One"); ComPort.Handshake = (Handshake)Enum.Parse(typeof(Handshake), "None"); ComPort.Parity = (Parity)Enum.Parse(typeof(Parity), "None"); }然后您打開您通過組合框選擇的 COM 端口,單擊此處: private void btnPortState_Click(object sender, EventArgs e) { try { if (btnPortState.Text == "COMPort Closed / Click to Open") { btnPortState.BackColor = Color.Green; btnPortState.Text = "COMPort Open / Click To Close"; ComPort.PortName = Convert.ToString(cboPorts.Text); ComPort.Open(); }
- 1 回答
- 0 關注
- 117 瀏覽
添加回答
舉報
0/150
提交
取消