C#学习教程:WPFWindow在启动时抛出TypeInitializationException单击它时,将出现自定义窗口。但是,单击时没有任何显示。我在日志文件中看到以下异常。是什么原因造成的以及如何解决?非常感谢2012-04-0909:59:50,161[1]ERRORHelper[(null)]-名称:TypeInitializationException消息:“System.Windows.Window”的类型初始值设定项引发异常。目标:Void.ctor()堆栈:在System.Windows.Window..ctor()在MyShared.View.ConnectionSetup..ctor()在MyAddIn.Connect.BtnClick(IRibbonControl控件)MyAddIn.Connect.GetSettings()。:TypeInitializationException消息:“System.Windows.FrameworkElement”的类型初始值设定项引发异常。目标:Void.cctor()堆栈:在System.Windows.Window..cctor()名称:TypeInitializationException消息:“System.Windows.Documents.TextElement”的类型初始值设定项引发异常。目标:Void.cctor()堆栈:位于System.Windows.FrameworkElement..cctor()名称:TypeInitializationException消息:“MS.Internal.FontCache.Util”的类型初始值设定项引发异常。目标:Int32get_Dpi()堆栈:在MS.Internal.FontCache.Util.get_Dpi()在System.Windows.SystemFonts.ConvertFontHeight(Int32height)在System.Windows.Dindows.TextElement..cctor()。名称:UriFormatException消息:无效的URI:无法确定URI的格式。目标:VoidCreateThis(System.String,Boolean,System.UriKind)Internal.FontCache.Util..cctor()编辑,这是xaml代码历史添加删除用户名:密码:忘记密码?保存用户名和密码确定历史实时用户名:密码:忘记密码?保存用户名和密码OK服务器实时关闭单击功能区时,将执行代码,ConnectionSetup是上面的xaml文件privateboolGetSettings(){varsettingUI=newConnectionSetup();settingUI.DataContext=设置;CenterMainWindow(settingUI,wndHandle.Handle);布尔?结果=settingUI.ShowDialog();返回结果??错误的;}privatevoidCenterMainWindow(System.Windows.Windowwindow,IntPtrownerHandle){varhelper=newSystem.Windows.Interop.WindowInteropHelper(window){Owner=ownerHandle};//居中窗口//注意-需要使用HwndSource来获取WPF拥有的窗口的句柄,//句柄仅在SourceInitialized已被提升时存在//raisedwindow.SourceInitialized+=delegate{//获取非WPF所有者窗口的WPF大小和位置varnonWPFOwnerLeft=XLApp.Left;varnonWPFOwnerWidth=XLApp.Width;varnonWPFOwnerTop=XLApp.Top;varnonWPFOwnerHeight=XLApp.Height;//获取转换矩阵以将非WPF所有者窗口//大小和位置单位转换为与设备无关的WPF//大小和位置单位varsource=System.Windows.Interop.HwndSource.FromHwnd(helper.Handle);if(source!=null&&source.CompositionTarget!=null){varmatrix=source.CompositionTarget.TransformFromDevice;varownerWPFSize=matrix.Transform(newSystem.Windows.Point(nonWPFOwnerWidth,nonWPFOwnerHeight));varownerWPFPosition=matrix.Transform(newSystem.Windows.Point(nonWPFOwnerLeft,nonWPFOwnerTop));//居中WPF窗口window.WindowStartupLocation=WindowStartupLocation.Manual;window.Left=Math.Max(0,ownerWPFPosition.X+(ownerWPFSize.X-window.Width)/2);window.Top=Math.Max(0,ownerWPFPosition.Y+(ownerWPFSize.Y-window.Height)/2);}};从你发布的错误堆栈来看,你的设置窗口可能有一个链接不幸的是,该链接包含一个无效的URL,导致窗口创建失败。编辑:仔细查看了您的代码和错误消息后,很明显我看错了区域。一些搜索在wpf中发现了一个错误。简短版本:目标机器上的windir环境变量可能未正确设置,导致字体子系统中断。解决方法是通过在启动时添加以下内容来修复目标计算机注册表或代码中的环境变量:Environment.SetEnvironmentVariable("windir",Environment.GetEnvironmentVariable("SystemRoot"));我们中有几个人遇到过这个问题。此处描述的解决方案(由PATH大于2048个字符引起)解决了该问题。我担心上面的语句在以太多或太少特权运行的代码中可能会出现问题。当然,我的应用程序在我的工作站上以管理员身份运行,调用Environment.SetEnvironmentVariable("windir",Environment.GetEnvironmentVariable("SystemRoot"));没有问题。但我不确定SetEnvironmentVariable是否真的可以锁定在操作系统上运行。有没有人a)试过这是真的,b)在低特权环境中试过>此外,在使用此调用安装应用程序后,当应用程序启动并运行一次时,我发现有些奇怪。所有其他应用程序都无法再看到windir,它不会扩展到C:\Windows。我将执行整个安装并在没有它的情况下运行,看看TypeInvocationexception是否再次出现,如果没有出现,则操作系统windir变量是否保持不变。更新:我已经确认我注意到的不良行为是由于未指定SetEnvironment调用的目标。我的问题似乎已通过使用以下内容得到缓解:当我没有设置目标时,我的Windows会话非常奇怪地发生了一些需要我注销然后重新启动甚至重新启动的事情。所以除非这个改变真的是在机器或进程级别,不要假设你会满意默认值需要了解更多关于C#的学习教程,希望你多多关注上网,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
