FindToolWindow Exception
本文关键字:Exception FindToolWindow | 更新日期: 2023-09-27 17:53:29
我在一个visual studio扩展项目中实现了ShowToolWindow()函数,该项目显示单击按钮时的工具窗口。下面的代码可以工作:
private void ShowToolWindow()
{
IVsUIShell vsUIShell = (IVsUIShell)Package.GetGlobalService(typeof(SVsUIShell));
IVsWindowFrame frame;
Guid WindowGuid = new Guid("48d81433-5d5c-4d4c-a174-d8e620c0e0a8");
vsUIShell.FindToolWindow((uint)__VSFINDTOOLWIN.FTW_fForceCreate, ref WindowGuid, out frame);
frame.Show();
}
但是,下面的代码不能工作
private void ShowToolWindow1()
{
this.package = new ToolWindowPackage()/*Package that provides the window*/;
var window = (MyToolWindow)this.package.FindToolWindow(typeof(MyToolWindow), 0, true); /*This line throws an exception*/
IVsWindowFrame frame = window.Frame;
frame.show();
}
在这种情况下,FindToolWindow抛出以下异常
Activated Event Time Duration线程异常抛出:'System. '在Microsoft.VisualStudio.Shell.15.0.dll中出现了一个异常(" service 'Microsoft.VisualStudio.Shell.Interop. dll ')。要使用此功能,必须安装SVsUIShell。确保此服务可用。")。抛出异常:'System. '在Microsoft.VisualStudio.Shell.15.0.dll中出现了一个异常(" service 'Microsoft.VisualStudio.Shell.Interop. dll ')。要使用此功能,必须安装SVsUIShell。
似乎没有调用Package。FindToolWindow,而是ivsuisshell。FindToolWindow。我该如何解决这个问题呢?
我问这个问题是因为我需要得到ToolWindowPane的句柄。因此,即使第一种方法正确显示工具窗口,它也是不够的。这个问题的另一个解决方案,有人能告诉我如何通过第一种方法获得ToolWindowPane的句柄吗?
你不应该自己创建一个新的ToolWindowPackage实例。应该使用Visual Studio实例化的现有包实例。