我正在尝试使用RichTextBox将报告文件保存到磁盘,但我收到一个空文件。
ReportRtb.Text = Report & Chr(9) & Source
ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText)
我不明白我做错了什么。 这个函数是从一个Thread调用的,可以相关吗?
答案 0 :(得分:1)
是的,这个问题肯定与您使用的第二个线程有关,因为您不能从任何其他线程设置RichTextBox的文本(或表单上的任何其他控件),而是创建它的那个。
尝试使用以下代码。
ReportRtb.Invoke(Sub
ReportRtb.Text = Report & Chr(9) & Source
ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText)
End Sub)
使用Invoke(...)
语句,您可以从创建控件的线程调用lambda(或委托子,但lambda更容易),因此这将正确设置文本然后将其写入到文件。
如果这不能解决问题,请使用Report
或任何其他日志记录/调试输出工具检查Source
和Console.WriteLine(...)
变量的内容。
如果这也不起作用,请检查(使用断点)是否完全调用该函数,如果是,则代码停止工作在哪里。
如果所有这些都失败了,请考虑实现自己的保存代码,因为您只使用RichTextBox来编写纯文本。使用以下代码可以更有效,更快地完成此任务:
Dim sw As New StreamWriter(FullReportPath)
sw.Write(Report & Chr(9) & Source)
sw.Close() 'Never forget that because if you forget it, the file won't be written, too