题
我的问题:我有 SerialPort 的 DataReceived 事件,它侦听串行端口并将所有内容附加到 RichTextBox。现在我想将RichTextBox的内容保存到txt文件中。我可以这样做:
string text = RichTextBox.Text;
// save file
RichTextBox.Clear();
但我担心(如果我错了,请纠正我),就在我的两个操作(将内容保存到变量、清除 RichTextBox)之间,另一个输入可能会到达 SerialPort。因为我没有将其保存到我的变量中,并且我在它之后立即清除了 RichTextBox,所以可以删除这些新数据,而我什至不知道它曾经存在过。
这种情况真的会发生吗?我该如何避免?
谢谢
解决方案
您必须以某种方式同步来自串行端口的输入。我假设您在 DataReceived 事件中使用 Invoke。因此,对 RichTextBox 内容的任何更改都是由主线程完成的,您应该是安全的。
但由于来自串行端口的流不太可能是 RTF(如果是,则会遇到其他问题),因此您不妨使用 TextBox (MultLine=true)。
其他提示
这绝对有可能发生(而且很可能会发生)。
除非有其他考虑,我相信使用 SerialPort 流中的数据直接写入文本文件会更好,而不是使用 RichTextBox.Text 写入文件。DataReceived 事件处理程序应该看起来像这样......
private void SerialPort1.DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string DataText = // code to read the serialport data and convert
//it into a string, which you already have so I
//won't repeat it here.
WriteToTextBox(DataText);
WriteToFile(DataText);
}
不隶属于 StackOverflow