.net - 将代码添加到 visual studio 包/扩展中的当前编辑器窗口

标签 .net visual-studio vsix

如何在代码编辑器中从扩展中添加/删除代码?

例如:
我创建了一个扩展女巫修改来自传入套接字的代码
该示例使用 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/

相关文章:

.net - 基类中的 XmlText 属性破坏了序列化

Visual Studio 中的 C++20 支持

azure - Visual Studio 2022 缓存旧租户 ID,无法删除它

c# - 带有 VSIX 安装程序和 Nuget 包的 Visual Studio 2012 的多项目/解决方案模板

c# - 在 Visual Studio 2022 (.NET6) 中创建 C# 项目模板

c# - 如何声明值为字符串数组的 DefaultValue 属性?

c# - "Web Sites give You No Control over Namespaces"是什么意思?

c# - 如何检查两个不同的 URL 是否指向同一个资源?

python - 值错误 : Unknown MS Compiler version 1900

visual-studio - VSIX 在 SQL Server Management Studio 的扩展中获取查询结果