zoukankan      html  css  js  c++  java
  • [Winfrom] 使用一个启动快捷方式,打开2个不同的窗体并且共用一个缓存空间

    之所以有这个功能,是不想再给后台和前台写一套通讯机制的情况下偷懒的办法!

    之前发现在主函数里面写方法,第二次启动程序打开新窗体或是显示隐藏窗体!最后却发现在主函数里面打开的新窗体和原启动的程序并不是共享一个缓存的!

    于是乎想了一个比较歪的办法,原窗体设置计时器之类的检测变化,利用外部文件的变化,进行窗体的展示、隐藏和打开,这样实际上还是在原程序上打开的新窗体!

    外部文件使用什么都可以,文本、config、xml之类的!

    这个是写在主函数里面的,用来检测是否二次启动:

    Process[] processcollection = Process.GetProcessesByName(Application.CompanyName);
                // 如果该程序进程数量大于,则说明该程序已经运行,则弹出提示信息并提出本次操作,否则就创建该程序
                if (processcollection.Length > 1)
                {
                    string ss=ConfigurationManager.AppSettings["MainFlag"];
                    if (ss=="0")
                    {
                        SetConfigValue("MainFlag", "1");
                    }               
                }
                else
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    // 运行该应用程序
                    Application.Run(new FormClient());
                }

    这个是计时器里的检测:

     string mainflag = GetConfigValue("MainFlag"); 
                if (mainflag == "1")
                {
                    SetConfigValue("MainFlag","3");
                    FormMain fm = new FormMain();
                    fm.Show();
                }

    关闭新打开窗体的时候需要标记还原回去。

    修改和读取config:

            /// <summary>
            /// 获取AppSettings中某一节点值
            /// </summary>
            /// <param name="key"></param>
            public static string GetConfigValue(string key)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                if (config.AppSettings.Settings[key] != null)
                    return config.AppSettings.Settings[key].Value;
                else
    
                    return string.Empty;
            }
    
            /// <summary>
            /// 修改AppSettings中配置
            /// </summary>
            /// <param name="key">key值</param>
            /// <param name="value">相应值</param>
            public static bool SetConfigValue(string key, string value)
            {
                try
                {
                    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                    if (config.AppSettings.Settings[key] != null)
                        config.AppSettings.Settings[key].Value = value;
                    else
                        config.AppSettings.Settings.Add(key, value);
                    config.Save(ConfigurationSaveMode.Modified);
                    ConfigurationManager.RefreshSection("appSettings");
                    return true;
                }
                catch
                {
                    return false;
                }
            }

    不知道还有没有不利用外部文件的方式,达到这种效果!或者有着更好的方式,欢迎交流指导!!!

  • 相关阅读:
    子数组的最大乘积
    重建二叉树
    只考加法的面试题
    找出发帖的水王问题
    寻找最近点对
    寻找最大的k个数问题
    寻找数组中 的最大值最小值
    数组中的最长递增子序列
    常用的百度API地图操作
    div 背景自适应
  • 原文地址:https://www.cnblogs.com/weimingtian/p/9328319.html
Copyright © 2011-2022 走看看