1

我有一个用于文本编辑器的 Visual Studio 扩展,使用 MEF 大括号突出显示、语法突出显示、大纲显示等。

Visual Studio 会在每个文件的多个线程上运行我的标记器,还是只序列化?

4

1 回答 1

2

Visual Studio 编辑器只会在ITextBuffer/关联的线程上运行序列化的标记器ITextView。由于 Visual Studio 仅在主线程上创建有趣的ITextView/ITextBuffer实例,因此这里没有太多线程问题。

我小心翼翼地在上面说有趣,因为在某个时间点,调试器确实ITextBuffer在后台线程上创建了一些实例。但是他们使用了自定义内容类型,因此扩展通常不会绑定到它。

请注意,该ITagger<T>API 可用于任何扩展。从技术上讲,另一个扩展可以通过几种方式创建线程问题

  1. 请求在另一个线程上创建您的标记器。我知道没有这样做的扩展,这将被认为是不好的做法。
  2. 在后台线程上创建一个ITextView,从而导致您的ITagger<T>实现也在那里创建。
于 2013-08-26T15:12:35.230 回答