Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
5de1ec02
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5de1ec02
编写于
7月 18, 2017
作者:
R
Ravi Chande
提交者:
GitHub
7月 18, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #12287 from rchande/snippetsAfterSolutionLoad
Initialize snippets after solution load is complete
上级
9bdbe6f3
739c3825
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
10 addition
and
44 deletion
+10
-44
src/VisualStudio/Core/Def/Implementation/LanguageService/AbstractPackage`2.cs
...e/Def/Implementation/LanguageService/AbstractPackage`2.cs
+2
-0
src/VisualStudio/Core/Def/Implementation/Snippets/AbstractSnippetInfoService.cs
...Def/Implementation/Snippets/AbstractSnippetInfoService.cs
+8
-44
未找到文件。
src/VisualStudio/Core/Def/Implementation/LanguageService/AbstractPackage`2.cs
浏览文件 @
5de1ec02
...
...
@@ -96,6 +96,8 @@ protected override void LoadComponentsInUIContext()
_packageInstallerService
?.
Connect
(
this
.
RoslynLanguageName
);
_symbolSearchService
?.
Connect
(
this
.
RoslynLanguageName
);
HACK_AbstractCreateServicesOnUiThread
.
CreateServicesOnUIThread
(
ComponentModel
,
RoslynLanguageName
);
}
protected
abstract
VisualStudioWorkspaceImpl
CreateWorkspace
();
...
...
src/VisualStudio/Core/Def/Implementation/Snippets/AbstractSnippetInfoService.cs
浏览文件 @
5de1ec02
...
...
@@ -113,32 +113,16 @@ private void PopulateSnippetCaches()
{
Debug
.
Assert
(
_expansionManager
!=
null
);
// If the expansion manager is an IExpansionManager, then we can use the asynchronous
// population mechanism it provides. Otherwise, getting snippet information from the
// IVsExpansionManager must be done synchronously on the UI thread.
// IExpansionManager was introduced in Visual Studio 2015 Update 1, but will be enabled
// by default for the first time in Visual Studio 2015 Update 2. However, the platform
// still supports returning the IVsExpansionManager if a major problem in the
// IExpansionManager is discovered, so we must continue supporting the fallback.
var
token
=
_waiter
.
BeginAsyncOperation
(
GetType
().
Name
+
".Start"
);
var
asyncExpansionManager
=
_expansionManager
as
IExpansionManager
;
if
(
asyncExpansionManager
!=
null
)
{
// Call the asynchronous IExpansionManager API from a background thread
Task
.
Run
(()
=>
PopulateSnippetCacheAsync
(
asyncExpansionManager
))
.
CompletesAsyncOperation
(
token
);
}
else
{
// Call the synchronous IVsExpansionManager API from the UI thread
Task
.
Factory
.
StartNew
(()
=>
PopulateSnippetCacheOnForeground
(
_expansionManager
),
CancellationToken
.
None
,
TaskCreationOptions
.
None
,
ForegroundTaskScheduler
).
CompletesAsyncOperation
(
token
);
}
// In Dev14 Update2+ the platform always provides an IExpansion Manager
var
asyncExpansionManager
=
(
IExpansionManager
)
_expansionManager
;
// Call the asynchronous IExpansionManager API from a background thread
Task
.
Factory
.
StartNew
(()
=>
PopulateSnippetCacheAsync
(
asyncExpansionManager
),
CancellationToken
.
None
,
TaskCreationOptions
.
None
,
TaskScheduler
.
Default
).
CompletesAsyncOperation
(
token
);
}
private
async
Task
PopulateSnippetCacheAsync
(
IExpansionManager
expansionManager
)
...
...
@@ -162,26 +146,6 @@ private async Task PopulateSnippetCacheAsync(IExpansionManager expansionManager)
ForegroundTaskScheduler
).
ConfigureAwait
(
false
);
}
/// <remarks>
/// Changes to the <see cref="IVsExpansionManager.EnumerateExpansions"/> invocation
/// should also be made to the IExpansionManager.EnumerateExpansionsAsync
/// invocation in <see cref="PopulateSnippetCacheAsync(IExpansionManager)"/>.
/// </remarks>
private
void
PopulateSnippetCacheOnForeground
(
IVsExpansionManager
expansionManager
)
{
AssertIsForeground
();
expansionManager
.
EnumerateExpansions
(
_languageGuidForSnippets
,
fShortCutOnly
:
0
,
bstrTypes
:
null
,
iCountTypes
:
0
,
fIncludeNULLType
:
1
,
fIncludeDuplicates
:
1
,
// Allows snippets with the same title but different shortcuts
pEnum
:
out
var
expansionEnumerator
);
PopulateSnippetCacheFromExpansionEnumeration
(
expansionEnumerator
);
}
/// <remarks>
/// This method must be called on the UI thread because it eventually calls into
/// IVsExpansionEnumeration.Next, which must be called on the UI thread due to an issue
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录