我需要在关闭应用程序之前保存RichtTextBox的文本

时间:2017-06-09 14:00:14

标签: vb.net winforms

我有一个WinForm应用程序,我需要在关闭程序之前将文本保存在RichtTexBox中,因为它是一个日志。 我在Form1.Closing上实现了它,但有时我得到一个错误,因为RichtTexBox不再存在。

RichTextBox有一个代表来添加文本。

当我尝试将文本添加到RichTextBox并且表单正在关闭时,通常会出现此错误。

有人可以告诉一些提示,以避免这种情况吗?

2 个答案:

答案 0 :(得分:0)

Dim w, wz As IO.StreamWriter
w = New IO.StreamWriter(chl.Text & ("\listfulename-" & cmb_FileTypes.SelectedItem.ToString.Trim(".", "*") & "-.txt"))
wz = New IO.StreamWriter(chl.Text & ("\listnames-" & cmb_FileTypes.SelectedItem.ToString.Trim(".", "*") & "-.txt"))
For i = 0 To List.Items.Count - 1
  w.WriteLine(List.Items.Item(i))
  wz.WriteLine(ListBox1.Items.Item(i))
Next
w.Close()
wz.Close()

答案 1 :(得分:0)

正如Visual Vincent在评论中所说,在Form.Closing中读取RichTextBox的值不应该是一个问题,因为它是在处理控件之前引发的。您的异常很可能是由于您的其他线程在处理完RichTextBox后尝试访问它。

为什么不在委托中添加一个检查(或者用于从另一个线程访问控件的任何方法)以查看RichTextBox是否为空?如果是,则不要访问它。 修改:您需要采取措施确保在检查null之后无法处理RichTextBox ,但之前使用线程同步设备(如互斥锁)访问它。

或者,如果您希望捕获所有消息,包括表单关闭时的最后一条消息,您可以等到所有线程都退出Form.Closing。