Visual studio 另一个诀窍是;对话框必须由用户启动;Silverlight打印中的安全异常

Visual studio 另一个诀窍是;对话框必须由用户启动;Silverlight打印中的安全异常,visual-studio,silverlight,internet-explorer,printing,debugging,Visual Studio,Silverlight,Internet Explorer,Printing,Debugging,当我试图用Silverlight打印一些东西时,我遇到了臭名昭著的“对话框必须由用户启动”安全异常。如您所见,该对话框由用户启动,如下所示: ,因为我没有设置任何断点,但这是一个演示应用程序,尽可能简单 有什么想法吗?我想这是VisualStudio的一个怪癖,可能是一些扩展造成了干扰,因为当我在它之外启动应用程序时,事情似乎是正常的。我首先想到的可能是代码契约干扰了它们的IL编织,但是对于这个项目,它们被停用了 更新:这只是一个从文件系统本地运行的简单Silverlight应用程序。当我执行

当我试图用Silverlight打印一些东西时,我遇到了臭名昭著的“对话框必须由用户启动”安全异常。如您所见,该对话框由用户启动,如下所示:

,因为我没有设置任何断点,但这是一个演示应用程序,尽可能简单

有什么想法吗?我想这是VisualStudio的一个怪癖,可能是一些扩展造成了干扰,因为当我在它之外启动应用程序时,事情似乎是正常的。我首先想到的可能是代码契约干扰了它们的IL编织,但是对于这个项目,它们被停用了

更新:这只是一个从文件系统本地运行的简单Silverlight应用程序。当我执行“启动调试”时,VisualStudio将创建一个宿主HTML文件,其中包含调试响应中的Silverlight应用程序。释放项目的文件夹,启动带有该HTML文件的Internet Explorer,并将调试器附加到其中

更新2:当我创建一个web项目来托管Silverlight应用程序并在IIS上为其创建一个虚拟目录时,我也会遇到相同的错误

我可能还想补充一点,在其他Silverlight项目中,无论其宿主场景如何,我都不会遇到打印问题

更新3:我下载了FireFox,它可以工作,当我调试它时,我没有收到错误。所以这似乎与我的IE8有关。我上传了解决方案:

我想知道是否有人能繁殖


有人知道我应该向哪个团队提交错误报告吗?银光队?我的团队?VS调试器团队?

我也经历过这种奇怪的行为。一个标准的按钮点击事件立即调用
OpenFileDialog
。在调试时,它经常会产生相同的错误,但当多次单击按钮时,它最终会被引导工作

但是,当构建为一个发行版时(或者可能只是运行同一个Xap而不在浏览器上附加调试器),问题就会消失。

尝试删除


if(sightpaleclistbox.Items.Count>0)

我遇到了同样的问题,并发现原因如下:

cnvsMain.Children.Remove(PrintPagePlaceHolder);
cnvMain位于用户按下打印按钮的页面上(我试图将其从该页面中删除,以便将其添加到要打印的画布)


我的小贴士:试着一行一行地注释,直到找到导致问题的行。而不是试着去解决它

我可以复制这个。您已经处理了两次单击,一次在XAML中,另一次在代码中。请参阅MainPage.xaml

<Button x:Name="PrintButton"
   Content="Gotta print 'em!" Margin="8" 
   Click="PrintButton_Click" />


不要为此感到难过。我上次是通过循环中的一个错误打印来完成的。

这是由主机引发的异常。GetBrowserHandle()方法返回一个Windows错误,访问被拒绝。当然,这也需要排除故障。很难回答,因为你根本没有描述你的托管场景。@Hans Passant-我用关于“托管场景”的更多信息更新了这个问题。你没有提到当你让它创建ASP.NET网站时发生了什么。@Hans Passant-我收到了同样的错误,请参阅更新。我不知道,我无法重新创建异常。我使用Win7,Firefox,VS2010,SilverLight4,UAC关闭。那么这些是已知的bug吗?如果没有,哪个团队应该提交错误报告?银光队?我的团队?VS调试器团队?感谢您的关注,但是没有,我当时已经尝试过了,今天仍然会遇到相同的错误。不过最近我打算为VS2010安装SP1,也许到时候它就可以了。谢谢,但我已经尝试过在示例项目中删除所有可能的代码。不过我没有尝试最新的更新。哇,这么多年过去了,就这样,谢谢。这就是当您无意识地复制和修改一些示例代码时得到的结果。但这仍然是一个奇怪的错误,因为它仍然直接在事件处理程序中执行,因此它应该只打印两次。