如何在代码编辑器中从扩展中添加/删除代码?
例如:
我创建了一个扩展女巫修改来自传入套接字的代码
该示例使用 Microsoft.VisualStudio.Text.Editor
尝试使用:
IWpfTextView TextView ;//从 visual studio 的“Create”事件中获取
ITextChange 变化;//从网络套接字或其他来源获取
ITextEdit edit = textView.TextBuffer.CreateEdit();//抛出“非所有者”异常
编辑。删除(更改。OldSpan);
edit.Insert(change.NewPosition, change.NewText);
但我想还有另一种方法,因为 CrateEdit() 函数失败了
最佳答案
这里的问题是您正试图从拥有它的线程之外的不同线程对 ITextBuffer
进行编辑。这根本不可能。 ITextBuffer
实例在第一次编辑发生后被关联到一个特定的线程,在那之后它们不能从不同的线程编辑。 TakeThreadOwnership
方法在 ITextBuffer
关联后也会失败。可以从任何线程调用大多数其他非编辑方法(例如 CurrentSnapshot
)。
通常 ITextBuffer
将关联到 Visual Studio UI 线程。因此,要执行编辑,请使用 UI 线程中的原始 SynchronizationContext.Current
实例或 Dispatcher.CurrentDispatcher
返回到 UI 线程,然后执行编辑。
关于.net - 将代码添加到 visual studio 包/扩展中的当前编辑器窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4326807/