Oui ce problème est très certainement lié au deuxième thread que vous utilisez, car vous ne pouvez pas définir le texte d'un RichTextBox (ou tout autre contrôle sur un formulaire) à partir de tout autre thread, mais celui à partir duquel il a été créé.
Essayez d'utiliser le code suivant. Avec la déclaration Invoke(...)
ReportRtb.Invoke(Sub
ReportRtb.Text = Report & Chr(9) & Source
ReportRtb.SaveFile(FullReportPath, RichTextBoxStreamType.PlainText)
End Sub)
, vous pouvez appeler un lambda (ou un sous délégué, mais un lambda est plus facile ici) du fil le contrôle a été créé, donc ce définirez le texte correctement puis écrire au fichier. Si cela ne résout pas le problème, vérifiez le contenu de vos variables Report
et Source
avec Console.WriteLine(...)
ou tout autre outil de sortie de journalisation/débogage.
Si cela ne fonctionne pas, vérifiez (avec un point d'arrêt) si la fonction est appelée du tout, et si c'est le cas, où le code s'arrête pour fonctionner.
Si tout cela échoue, envisagez d'implémenter votre propre code d'enregistrement, puisque vous utilisez uniquement RichTextBox pour écrire du texte brut. Cela pourrait se faire beaucoup plus efficace et plus rapidement avec le code suivant:
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
Il n'y a pas de code presque assez ici pour vous dire quoi que ce soit significatif –
@AFriend L'autre partie de la fonction est de créer le chemin de nom de fichier. Avez-vous besoin de ça? –
Eh bien, nous avons besoin d'un [MCVE] (https://stackoverflow.com/help/mcve) qui devrait inclure la façon dont vous générez 'FullReportPath' ainsi que les' Report' et 'Source'. –