C# 外部组件发生异常原因分析 [分析]
来源:互联网 发布:淘宝新店能报什么活动 编辑:程序博客网 时间:2024/04/29 08:47
在项目中,用From2 启动 Report 正常,用From1 启动 Report 失败,日志:
2007-05-12 13:11:06
StartGenerateReportTask: System.Runtime.InteropServices.SEHException: 外部组件发生异常。
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.RunDialog(Form form)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at ZTE.CCG.Report.ReportController.StartGenerateReportTask(String contractHeader) in ***/report/quotationgenerationmodule/reportcontroller.cs:line 469
由于From2 和 Report 是同一个人开发的,直接启动 ReportController 是没有问题的,而我们自己通过相同的方法启动 ReportController 就出现了问题。开始以为是我们程序那里出现了问题,跟踪代码发现这个异常不固定,很难确定是那里出现了问题。
虽然显示的外部组建发生异常,可应用程序中没有调用任何其他的第三方应用程序哦。
对比Form1 和Form2 发现:
Form1:
[STAThread]
public static void Main(string[] args)
{
// lots of code...
// it's same of the code posted on Form2.
}
Form2:
[STAThread]
public static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.DoEvent();
// lots of code...
}
更改Form1中的代码继续执行,程序正常执行,没有任何错误。
取消 那两句话,错误又再次出现。
再查询了一下MSDN ,发现 :
“此方法启用应用程序的 Windows XP 可视化样式。如果控件和操作系统支持可视化样式,则控件将以这种样式进行绘制。若要使 EnableVisualStyles 生效,必须在应用程序中创建任何控件之前调用它;EnableVisualStyles 通常是 Main 函数的第一行。当调用 EnableVisualStyles 时,无需单独的清单即可启用可视化样式。
对于支持 FlatStyle 属性的控件,请确保将 FlatStyle 属性设置为 FlatStyle.System 值。”
搜索 FlatStyle ,发现在 Report 里面很多自定义控件这么写的:
this.xxxControlName.FlatStyle = System.Windows.Form.FlatStyle.System;
也就是说,控件是使用的系统的样式。在使用系统样式的时候必须告诉系统启用虚拟样式。
否则可能出现上述应用程序异常。
为了验证,这个猜想,在From1 中注释掉:
Application.EnableVisualStyles();
Application.DoEvent();
果然程序执行时回出现异常。
在google 上搜索了一下,发现很多上述类似异常的都或多或少提及到XP 样式了。
相关资源:
1).NET 1.1 Framework Fix:
http://support.microsoft.com/Default.aspx?kbid=899511
2)VS2005 中解决方法:
http://support.microsoft.com/kb/897298
Microsoft MSDN 论坛的一些相关信息:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=48878&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=388724&SiteID=1
- C# 外部组件发生异常原因分析 [分析]
- C#生成word时发生“外部组件发生异常”
- 发生ConcurrentModificationException异常的原因分析
- 针对C#操作Word时提示:外部组件发生异常问题
- ASP.NET 中的“外部组件发生异常”信息
- 外部组件发生异常 无效的短文件名
- Oracle发生死锁原因分析及解决方法
- InvalidClassException异常的原因分析
- socket异常及原因分析
- ConcurrentModificationException异常产生原因分析
- .NET 使用 ODP.NET 组件访问Oracle提示 外部组件发生异常 错误的解决办法
- STL string 析构异常原因分析
- 空指针异常的原因分析
- STL string 析构异常原因分析
- jvm_bind端口占用异常原因分析
- java.lang.NoClassDefFoundError异常原因分析
- C#异常性能影响分析
- AIDL 发生异常的原因
- DWREngine API 使用方法
- DWRUtils API 使用方法
- DWR中提供XML的传递方法
- flash 常见问题荟萃
- 写在Effective C++读后
- C# 外部组件发生异常原因分析 [分析]
- NetBeans IDE + Visual Web Pack + Tomcat中数据库问题解决
- 个人的力量如此如此微弱!
- FeedBurner
- Java SE6调用Java编译器的两种新方法
- 信息周刊:拨开SOA迷雾
- 用JBuilder2007开发扩展JSF标签的插件
- 被静静点名了,老老实实回答问题吧
- 我的第一个JAVA程序