【发布时间】:2021-11-10 23:22:15
【问题描述】:
我正在开发一个 MS Project VSTO 加载项。我创建了一个 WPF 表单,我想在方法运行时单击一个按钮并在 UI 上显示一个不确定的进度条。我可以通过将方法包装在 Task.Run() 中来实现这一点,唯一的问题是异步运行该方法似乎比正常运行慢大约 30 倍。我正在调用的方法与 Office.Interop.MSProject 库中的对象交互,所以我不确定这是导致我的性能问题的 Office 还是 COM。
private async void ButtonClickMethod()
{
var tar = await RunTraceAnalysisAsync();
// doing this takes ~30 times longer to run than just calling traceToolsController.RunTraceAnalysis() normally
}
private Task<TraceAnalysisResult> RunTraceAnalysisAsync()
{
return Task.Run(() => { return traceToolsController.RunTraceAnalysis(); });
}
【问题讨论】:
-
RunTraceAnalysisAsync()的代码是什么样的? -
我将它包含在代码 sn-p 中。你想知道
tracetoolsController.RunTraceAnalysis()的代码是什么样的吗? -
我对@987654324@ 更感兴趣。
RunTraceAnalysis已经可以使用了。 -
RunTraceAnalysisAsync()只是将tracetoolsController.RunTraceAnalysis()放入Task.Run()包装器中 -
FWIW 我在 VSTO 加载项中解决进度条的方法是我有一个进度条表单,它有一个调用转发器类,它使用 Type.InvokeMember 来调用特定方法。因此,所有使用进度条的代码都是通过显示该表单并传递要调用的函数名称来启动的。调用转发器是调用实际代码的地方,然后该函数可以在其代码运行时更新进度条。性能没有下降。
标签: c# com vsto office-interop ms-project