2017-09-05 29 views
1

我想通过使用RichTextBox将报告文件保存到磁盘,但我得到一个空文件。RichTextBox创建一个空文件

ReportRtb.Text = Report & Chr(9) & Source 
ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText) 

我不明白我在做什么错。 这个函数是从一个线程调用的,可以相关吗?

+0

有几乎没有足够的代码在这里告诉你什么有意义 –

+0

@AFriend功能的另一部分是创建的文件名路径。你需要吗? –

+0

那么我们需要一个[MCVE](https://stackoverflow.com/help/mcve),其中应该包括如何生成'FullReportPath'以及什么'Report'和'Source'。 –

回答

1

是的,这个问题与您使用的第二个线程绝对相关,因为您无法从任何其他线程设置RichTextBox的文本(或任何其他线程的控件),而是从其创建的线程创建。

请尝试使用以下代码。

ReportRtb.Invoke(Sub 
    ReportRtb.Text = Report & Chr(9) & Source 
    ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText) 
End Sub) 

随着Invoke(...)声明,你可以调用一个lambda(或委托子,但拉姆达是在这里更容易)从控制上创建线程,因此这将正确设置文本,然后把它写到文件。

如果这样不能解决问题,请使用Console.WriteLine(...)或任何其他记录/调试输出工具检查ReportSource变量的内容。

如果这也不起作用,检查(带有断点)是否函数被调用,如果是,代码停止工作。

如果所有这些都失败了,考虑实施您自己的保存代码,因为您只使用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 
+0

感谢您的回答。 RTB不可见,我的意思是不在GUI上。我在只由线程调用的函数内创建它。此外,我尝试通过从GUI上的按钮调用功能,并获得相同的结果。我检查了RTB.Text属性,看起来没问题。 –

+0

StreamWriter工作好,谢谢! –

+0

您是否尝试了断点来查看变量的内容,以及它们是否正确?另外,请尝试使用StreamWriter解决方案代替RichTextBox,因为RichTextBox的设计不是在没有GUI的情况下运行,而且它应该更快更高效。好的,我现在看到了StreamWriter工作的评论。如果它适合你,我可以请你接受我的答案吗? – Twometer