博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
引起Silverlight白屏的原因
阅读量:7068 次
发布时间:2019-06-28

本文共 1570 字,大约阅读时间需要 5 分钟。

白屏的原因大部分是因为"未捕获的异常"造成的。如果你建立的是“Silverlight 应用程序”而不是"导航应用程序“或”Bussiness应用程序“,那么恭喜你!你会经常遭遇白屏。因为调试时,未捕获的异常不会引起调试中断在出错的位置,而是引发应用程序的UnhandledException事件!然而“Silverlight 应用程序”模板的事件处理程序是这样的:

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)  {
     // 如果应用程序是在调试器外运行的     if (!System.Diagnostics.Debugger.IsAttached)     {
//出错后,会继续执行 e.Handled = true; Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); }); }
// 如果应用程序是在调试时运行的,对不起直接白屏!这不坑爹吗?让人以为SL不成熟! }

看到了吧?不会有任何错误提示,只是简单的白屏,自己加个MessageBox吧。建议平常还是建立“导航应用程序”或”Bussiness应用程序“,因为此模板的事件处理程序起码会给我们提示:

       // 如果导航过程中出现错误,则显示错误窗口         private void ContentFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)         {
e.Handled = true; ChildWindow errorWin = new ErrorWindow(e.Uri); errorWin.Show(); }

不过,此提示只会显示“未找到页面:”。因为:

public ErrorWindow(Uri uri)  {
InitializeComponent(); if (uri != null)  {
ErrorTextBox.Text = "未找到页面: \"" + uri.ToString() + "\""; } }

遭遇白屏源于自己写的较复杂的代码,里面用了大量的Dispatcher用来延迟处理一些界面布局,由于算法有些复杂,于是频繁遭遇白屏,起初以为是工作项排队太多造成UI主线程得不到CPU时间,停止响应响应造成的。然而,当我要模拟出这种情况引起的白屏时,却没有成功。我的实验代码是这样的:

void DoWork()         {
Dispatcher.BeginInvoke(new Action(DoWork)); Dispatcher.BeginInvoke(new Action(DoWork)); }

调用DoWork函数并不会引起白屏,它只会使你的应用程序慢慢的停止响应,界面固定不动!可以说,大部分白屏是由于出错造成的,并且出错的原因大多与Xaml代码有关,如果用了自定义控件,代码文件中的错误不会被调试器中断!

希望此文对SL新手有所帮助!

 

 

转载于:https://www.cnblogs.com/slmk/archive/2011/11/20/2255816.html

你可能感兴趣的文章
Python学习笔记
查看>>
Oracle
查看>>
MAT(MemoryAnalyzerTool)
查看>>
分享实用的JavaScript代码库
查看>>
46. Permutations
查看>>
49. Group Anagrams
查看>>
团队作业7——第二次项目冲刺-Beta版本项目计划
查看>>
vue双向绑定原理
查看>>
初学python,感受和C的不同
查看>>
洛谷P3146 [USACO16OPEN]248
查看>>
Codeforces Round #419 (Div. 2) A-E
查看>>
【Leetcode】Path Sum II
查看>>
asp.net 2.0 导出DataTable到Excel中
查看>>
PCA算法学习_1(OpenCV中PCA实现人脸降维)
查看>>
Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)
查看>>
对比学习UIKit和AppKit--入门级
查看>>
深入学习JVM了解JVM内存模型
查看>>
LabVIEW与Arduino的连接
查看>>
[转]MySQL排序原理与案例分析
查看>>
ILMerge合并多个DLL
查看>>