点击这里:WorldWind学习系列 2:擒贼先擒王篇2来源: 发布时间:星期四, 2009年12月10日 浏览:0次 评论:0
4.解析Main( args)中参数args主要是在控制台中启动时同时赋予了参数形式
// ParseArgs may values that are used where, // such as startFullScreen and CurrentSettingsDirectory. ParseArgs(args); args中参数可能是: "worldwind://":加载定位显示球体某处 “/f” :全屏启动 “/s=……”:指定加载“配置”文件夹路径 这里要注意事Main般是没有参数如果我们以后要写可以在控制台下给启动传入参数可以借鉴下 5.加载上次使用配置信息包括上次使用WorldWind主窗体使用信息和上次使用World球体显示信息 ="code_img_closed" alt="" src="http://CrazyCoder.cn/WebFiles/200912/5a93f561-1c51-4025-867d-f176a03fab21.g" />="code_img_opened" _disibledevent=>="cnblogs_code_collapse">加载配置 (CurrentSettingsDirectory null) {// load program tings from default directoryLoadSettings; World.LoadSettings; } { LoadSettings(CurrentSettingsDirectory); World.LoadSettings(CurrentSettingsDirectory); } 这里有几个知识点可以学习下: (1)C#对象序列化为XML文件和反序列化Xml文件为对象参看:http://www.cnblogs.com/wuhenke/archive/2009/12/10/1621437.html SettingsBase类 Load思路方法中反序列化: XmlSerializer ser = XmlSerializer(defaultSettings.GetType); using(TextReader tr = StreamReader(fileName)) { tings = (SettingsBase)ser.Deserialize(tr); tings.m_fileName = fileName; // remember where we loaded from for a later save} (2)C#中StreamWriter类学习使用 Log类主要用于输出Error Bug Warning等输出记录主WorldWind.log是保存所有记录然后对Debug信息单独输出单个.log文件 ="code_img_closed" alt="" src="http://CrazyCoder.cn/WebFiles/200912/5a93f561-1c51-4025-867d-f176a03fab21.g" />="code_img_opened" _disibledevent=>="cnblogs_code_collapse">logWriter负责写WorldWind.log logPath = DefaultSettingsDirectory; Directory.CreateDirectory(logPath); // TODO: do not hardcode logfile name?logFilePath = Path.Combine( logPath, "WorldWind.log" ); logWriter = StreamWriter(logFilePath, true); logWriter.AutoFlush = true; public void Write( Exception caught )负责写单独每个Error输出 ="code_img_closed" alt="" src="http://CrazyCoder.cn/WebFiles/200912/5a93f561-1c51-4025-867d-f176a03fab21.g" />="code_img_opened" _disibledevent=>="cnblogs_code_collapse">单个Log文件输出 functionName = "Unknown"; stacktrace = null; (caught.StackTrace != null) { stacktrace = caught.StackTrace.Split('\n'); firstStackTraceLine = stacktrace[0]; functionName = firstStackTraceLine.Trim.Split(" (".ToCharArray)[1]; } logFileName = .Format("DEBUG_{0}.txt", DateTime.Now.("yyyy-MM-dd-HH-mm-ss-ffff")); //以DEBUG+日期作为文件名 logFullPath = Path.Combine(logPath, logFileName); using (StreamWriter sw = StreamWriter(logFullPath, false)) { sw.WriteLine(caught.); } 6.启动主还有对线程异常事件处理和空闲处理(防止过度休眠) Application.ThreadException ThreadExceptionEventHandler(Application_ThreadException); MainApplication app = MainApplication; Application.Idle EventHandler(app.WorldWindow.OnApplicationIdle); Application.Run(app); 7.启动后将状态配置保存起来 // Save World tings World.Settings.Save; 其中用到了将World配置对象WorldSettings(注意:不是其父类SettingsBase,只是其父类Save思路方法)序列化为XML文件并保存以备下次启动前读取World(即球体)上次状态配置 ="code_img_closed" alt="" src="http://CrazyCoder.cn/WebFiles/200912/5a93f561-1c51-4025-867d-f176a03fab21.g" />="code_img_opened" _disibledevent=>="cnblogs_code_collapse">将WorldSettings序列化 public virtual void Save( fileName) { XmlSerializer ser = null; try { ser = XmlSerializer(this.GetType); using(TextWriter tw = StreamWriter(fileName)) { ser.Serialize(tw, this); } } catch(Exception ex) { throw .Exception(String.Format("Saving tings '{0}' to {1} failed", this.GetType., fileName), ex); } } 8.保存整体该次状态配置(此处类似7不详讲只是这次序列化对象是WorldWindSettings) // Save program tings Settings.Save; 整理总结:主内容分析学习到此完成我们的后会针对各功能分别分析个个突破 0
相关文章
读者评论发表评论 |
|