首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF应用程序错误与.Net框架修复

WPF应用程序错误与.Net框架修复
EN

Stack Overflow用户
提问于 2012-02-11 17:09:23
回答 5查看 2.1K关注 0票数 11

背景:我有一个运行在Windows和Windows PosReady 2009 PC上的.Net 3.5WPF“棱镜”-based应用程序。这个应用程序运行在每天晚上都会关闭的个人电脑上(通过C#呼叫"shutdown.exe"),并在早上(通过局域网上的唤醒)重新启动。该应用程序是基于触摸(使用ELO触摸屏),没有鼠标或键盘连接,用户不能访问Windows。

发布:我们偶尔会看到两种情况之一发生的问题;或者应用程序似乎没有正确加载,我们看到一个空白的白色表单显示,或者它停止了对触摸的响应。通过查看我们的(log4net)日志,我们可以看到,我们仍然在处理触摸事件,并在这两种情况下记录它们。这种情况通常发生在切换视图时,我们还在日志中看到Prism RegionManager正在适当地删除和添加视图。

Troubleshooting:应用程序正在使用Clonezilla应用的图像在大约100台PC上运行,这种情况只偶尔发生。因为它并不是发生在所有的PC上,而且没有任何异常记录,或者任何显示事件查看器问题的东西,我们已经诉诸于更多的PC和OS级别的修复。具体来说,我们尝试重新启动应用程序和个人电脑,偶尔会有短期的成功--这意味着在这些重新启动之后,应用程序有时会正常工作,但最多只能运行几个小时。我们还假设应用程序已经损坏,我们已经删除并重新安装它,但没有成功。

唯一能解决这个问题的似乎是使用提供的.Net 3.5 SP1安装程序包修复SP1框架。

结论:由于这似乎解决了这个问题,而其他任何事情都没有解决,所以我们似乎在某种程度上破坏了GAC的框架dll --无论是通过代码还是PC上的引导/关闭过程。

问询:这将导致以下几个问题:

  • 对于如何进一步找出问题的根源,有什么想法吗?
  • 对于我们能做些什么来防止这个问题,有什么想法吗?
  • 对于潜在的问题有什么想法吗?

谢谢你的帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-26 12:50:41

我们终于能够获得一台展示这种行为的生产机器,并通过许多故障排除步骤,包括向Microsoft发送转储文件,发现了该问题。

WPF字体缓存Windows服务偶尔会进入损坏状态,导致一个简单的缓存请求无限期地阻塞。此挂起导致了上述在我们的WPF应用程序中描述的所有行为。

简单的解决方案:停止并禁用服务。在禁用服务和重新启动PC之后,服务不再使用,我们没有看到任何这些问题。从理论上讲,这会导致更长的应用程序加载时间,但是我们已经看到了零的负面影响。

注意,该服务有两个版本: 3.0.0.0和4.0.0.0。如果应用程序的目标是.Net 3.0或3.5,则需要禁用3服务,如果以4.0+为目标,则需要禁用4服务。

感谢大家的意见和建议。

票数 2
EN

Stack Overflow用户

发布于 2012-02-18 07:12:43

当我们连接触摸屏时,我们在WPF应用程序中提醒您的问题。这是由于.Net中的自动化框架中有一个错误。它导致我们的应用程序变得非常慢,或者完全挂起GUI线程。

您可以在:http://social.msdn.microsoft.com/Forums/en-IE/windowsaccessibilityandautomation/thread/6c4465e2-207c-4277-a67f-e0f55eff0110上阅读有关此问题的更多信息。

上面的线程中建议的解决方法是,删除自动化事件的任何侦听器,这些侦听器定期为我们工作。

这不是一个真正的答案,但既然我没有足够的代表?(我猜)我不能使用注释函数:)

票数 0
EN

Stack Overflow用户

发布于 2012-02-21 16:56:32

尝试全局错误捕获并查看它会产生什么。

代码语言:javascript
运行
复制
 public partial class App : Application
    {   
        [STAThread]
        public static void Main()
        {
                var application = new App();

                application.DispatcherUnhandledException += 
                    new DispatcherUnhandledExceptionEventHandler(application_DispatcherUnhandledException);

                application.InitializeComponent();
                application.Run();
        }

        static void application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            LogAndClose("Global exception: " + e.Exception.ToString());
        }

        public static void Log(string text)
        {
            try
            {
                System.IO.File.AppendAllText(Environment.CurrentDirectory + "\\Log.txt",
                    "[" + DateTime.Now.ToString("MM/dd/yy HH:mm:ss") + "] " + text + "\r\n");
            }
            catch { }
        }

        public static void LogAndClose(string text)
        {
            Log(text);

            try
            {
                Application.Current.Shutdown();
            }
            catch { }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9242174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档