应用序列化技术的一个典型开发场景就是保存应用程序的当前状态,它允许用户暂时中断当前的工作,关闭程序退出,下次重新启动程序时自动恢复上次的工作状态。

示例:

保存窗体颜色和位置的对象:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;

namespace SaveFormStatus{    [Serializable]public class FormStatus    {public Color BackgroundColor { get; set; }public int Left { get; set; }public int Top { get; set; }public int Width { get; set; }public int Height { get; set; }    }}

主程序:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;

namespace SaveFormStatus{public partial class frmMain : Form    {public frmMain()        {            InitializeComponent();            LoadStatus();        }

private void btnChooseColor_Click(object sender, EventArgs e)        {if (colorDialog1.ShowDialog() == DialogResult.OK)            {                BackColor = colorDialog1.Color;            }        }

private FormStatus status = null;private void SaveStatus()        {            status=new FormStatus();            status.BackgroundColor=this.BackColor;            status.Left=this.Left;            status.Top=this.Top;            status.Width=this.Width;            status.Height = this.Height;

using(FileStream fs=new FileStream("FormStatus.cfg",FileMode.Create))            {

                IFormatter formatter = new BinaryFormatter();                formatter.Serialize(fs, status);

            }        }

private void LoadStatus()        {try            {if (File.Exists("FormStatus.cfg"))                {

using (FileStream fs = new FileStream("FormStatus.cfg", FileMode.Open))                    {                        IFormatter formatter = new BinaryFormatter();                        status = formatter.Deserialize(fs) as FormStatus;if (status != null)                        {this.BackColor = status.BackgroundColor;this.Left = status.Left;this.Top = status.Top;this.Width = status.Width;this.Height = status.Height;

                        }                    }                }

            }catch (Exception ex)            {

                MessageBox.Show(ex.Message);            }

        }

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)        {            SaveStatus();        }    }}

转载于:https://www.cnblogs.com/eagle1986/archive/2012/02/14/2351977.html

对象序列化(六):应用实例-程序退出时保存状态相关推荐

  1. 如何在UWP应用程序退出时能做一些额外事情?

    如何在UWP应用程序退出时能做一些额外事情? 需求 思路 实现 小结 参考 需求 最近在做UWP的项目,其中有这样一个的需求:统计用户使用APP的时长. 思路 在用户打开app的时候,记录一个时间点t ...

  2. android程序退出时回调,关于android:通过刷卡杀死App时的回调

    我有一个涉及导航的应用程序. 如果用户启动导航,则会创建一种"navigationLifecycleManager".它存储在应用程序实例中,以便在配置更改,活动等之间切换时幸免于 ...

  3. 自定义Toast、程序退出时Toast也退出、Toast的用法

    当我们在一个应用中用到Toaster来做为提示时,发现这样一个问题,当某个条件服合时,会弹出Toaster的对话框,不停地执行这个条件,会不停进行Toaster.show的显示,执行几次就现示几次,即 ...

  4. python程序退出后保存变量_Python将变量存储在一个列表中,每次程序重新启动时都会保存这些变量...

    我正为我的频道开发一个Python Twitch IRC Bot,它似乎很简单,但我却被困在一个看似简单的任务上.我有一个积分系统,我认为它是有效的,但我发现每次我重新启动程序,包含用户余额的列表都会 ...

  5. java程序退出自动保存_你知道如何自动保存 Spring Boot 应用进程号吗

    1. 前言 欢迎阅读 Spring Boot 2 实战 系列文章. PID 对于系统运维来说并不陌生,但是对于一些开发者特别是新手还是要简单介绍一下的.它是 Process ID 的简称,是系统分配给 ...

  6. 将对象序列化与反序列实例

    概述: 有些时候我们需要把对象进行序列化或者反序列化,通过System.Runtime.Serialization.Formatters.Binary里的方法即可实现 . 实例如下: Code usi ...

  7. C# 程序退出时 杀死进程

    由于代码处理过,防止多开,如果之前的进程没有退出,再次启动小球时,就会程序无法启动的问题,所以在退出后强制再次杀死进程 查看 软件防止多开 #region 小球的右键菜单单击事件/// <sum ...

  8. Python程序退出时执行指定代码

    一:捕获所有的异常 二:采用traceback模块查看异常,需要导入traceback模块,这个方法会打印出异常代码的行号 三:调用atexit import atexit import signal ...

  9. mfc程序退出时删除托盘图标

    在退出函数中加入 nid.hWnd = this-> m_hWnd; nid.uID=IDR_MAINFRAME;     Shell_NotifyIcon(NIM_DELETE,&ni ...

最新文章

  1. vue.js安装过程(npm安装)
  2. 如何使用BigDecimal?
  3. python入门的120个基础练习_python入门的120个基础练习(一),自学python必看!!...
  4. [转载]offsetHeight , clientHeight, scrollHeight 区别
  5. NYOJ 915 +-字符串
  6. 计算机安装了打印驱动无法打印,安装打印机的时候为什么电脑无法正常识别打印机?...
  7. 主流Ajax框架介绍
  8. 人脸识别技术软件测试测什么,人脸识别这么火,你知道它是什么吗?
  9. android后台定时执行任务,后台执行的定时任务
  10. vscode 路径宏_VSCode宏怎么设置?VSCode宏的添加方法!
  11. web前端工程师做什么
  12. python对数据集处理,绘制世界地图
  13. ACM日历题新版(界面修改+国际节日)
  14. 汇编语言实现七段数码管显示控制实验
  15. 【SSH】MyEclipse卸载干净的方法
  16. prometheus查询语句学习
  17. MYSQL索引底层原理
  18. HP租车网站源码V6.0,一款专为租车行业打造的网站源码
  19. FreeSWITCH 对接阿里SDM(MRCP-SERVER)
  20. 华中科技大学计算机组成原理实验,单总线CPU设计(变/定长指令周期3级时序)(HUST),logisim,educoder

热门文章

  1. 《抓住“三伏天”习武健身的黄金季节》--胡俭雷
  2. Linux 搭建NTP服务器
  3. 用LoadRunner实现接口测试
  4. 清华大学2017届本科毕业典礼演讲——做有思想的行者
  5. Q89:全局光照(Global Illumination)——Path Tracing(只用于间接光照)
  6. 大数据可视化的方法和价值
  7. 服务器安装mysql文档_Linux 服务器安装MySQL数据库
  8. win7桌面运行html,手把手教你win7电脑如何运行config的操作教程
  9. java抛出异常齁_解決 Elasticsearch 使用 Java High Level REST Client 時出現 NoClassDefFoundError 錯誤...
  10. python安装失败找不到指定路径_解决安装python库时windows error5 报错的问题