我有一个程序每 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 回答
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消