我想通过使用RichTextBox将报告文件保存到磁盘,但我得到一个空文件。RichTextBox创建一个空文件
ReportRtb.Text = Report & Chr(9) & Source
ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText)
我不明白我在做什么错。 这个函数是从一个线程调用的,可以相关吗?
我想通过使用RichTextBox将报告文件保存到磁盘,但我得到一个空文件。RichTextBox创建一个空文件
ReportRtb.Text = Report & Chr(9) & Source
ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText)
我不明白我在做什么错。 这个函数是从一个线程调用的,可以相关吗?
是的,这个问题与您使用的第二个线程绝对相关,因为您无法从任何其他线程设置RichTextBox的文本(或任何其他线程的控件),而是从其创建的线程创建。
请尝试使用以下代码。
ReportRtb.Invoke(Sub
ReportRtb.Text = Report & Chr(9) & Source
ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText)
End Sub)
随着Invoke(...)
声明,你可以调用一个lambda(或委托子,但拉姆达是在这里更容易)从控制上创建线程,因此这将正确设置文本,然后把它写到文件。
如果这样不能解决问题,请使用Console.WriteLine(...)
或任何其他记录/调试输出工具检查Report
和Source
变量的内容。
如果这也不起作用,检查(带有断点)是否函数被调用,如果是,代码停止工作。
如果所有这些都失败了,考虑实施您自己的保存代码,因为您只使用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
感谢您的回答。 RTB不可见,我的意思是不在GUI上。我在只由线程调用的函数内创建它。此外,我尝试通过从GUI上的按钮调用功能,并获得相同的结果。我检查了RTB.Text属性,看起来没问题。 –
StreamWriter工作好,谢谢! –
您是否尝试了断点来查看变量的内容,以及它们是否正确?另外,请尝试使用StreamWriter解决方案代替RichTextBox,因为RichTextBox的设计不是在没有GUI的情况下运行,而且它应该更快更高效。好的,我现在看到了StreamWriter工作的评论。如果它适合你,我可以请你接受我的答案吗? – Twometer
有几乎没有足够的代码在这里告诉你什么有意义 –
@AFriend功能的另一部分是创建的文件名路径。你需要吗? –
那么我们需要一个[MCVE](https://stackoverflow.com/help/mcve),其中应该包括如何生成'FullReportPath'以及什么'Report'和'Source'。 –