使用Invoke从Richtextbox中保存文件
本文关键字:保存文件 Richtextbox Invoke 使用 | 更新日期: 2023-09-27 18:08:12
我有一个RichTextbox
,我试图保存文件使用
public bool SaveNote(string path)
{
try
{
_rtbContent.SaveFile(path, RichTextBoxStreamType.RichText);
return true;
}
catch
{
return false;
}
}
它工作得很好,直到我开始使用后台工作线程。现在这个方法是从后台工作器调用的,现在我收到一个错误
Cross-thread operation not valid: Control 'rtbContent' accessed from a thread other than the thread it was created on.
我认为我们必须使用_rtbContent.Invoke
调用它,但未能获得语法正确。我尝试的是
if(_rtbContent.InvokeRequired)
_rtbContent.Invoke(new MethodInvoker(_rtbContent.SaveFile(path, RichTextBoxStreamType.RichText)));
我在_rtbContent.SaveFile(path, RichTextBoxStreamType.RichText)
上得到Method name expected
编译错误。
我不太习惯使用这些线程,但最近已经开始使用它们了。有人能在这个问题上帮助我吗?
使用回调:
delegate void SaveNoteCallback(string path);
public void SaveNote(string path)
{
if(_rtbContent.InvokeRequired)
{
SaveNoteCallback d = new SaveNoteCallback(SaveNote);
this.Invoke(d, new object[] {path});
}
else
{
_rtbContent.SaveFile(path, RichTextBoxStreamType.RichText);
}
}
我得到了另一个有趣的解决方案,我想把它贴出来。
public void SaveNote(string path)
{
if(_rtbContent.InvokeRequired)
{
_rtbContent.Invoke(new MethodInvoker(delegate{_rtbContent.SaveFile(path, RichTextBoxStreamType.RichText}));
//Below is also same as above
//_rtbContent.Invoke(new MethodInvoker(()=>_rtbContent.SaveFile(path, RichTextBoxStreamType.RichText)));
}
else
{
_rtbContent.SaveFile(path, RichTextBoxStreamType.RichText);
}
}
我认为这是一个非常干净的解决方案。