zoukankan      html  css  js  c++  java
  • 在WinForm中使用CacheDependency来监视文件

    .Net类与窗体做成dll(COM)在PB中使用,在dll中的代码无法直接访问xxx.exe.config,于是就进行测试....
    下面是两组相关代码,注释中有详细说明

    1.对个种timer组件与CacheDependency的测试

    View Code
            private void button10_Click(object sender, EventArgs e)
            {
    
                Console.WriteLine("当前UI线程:" +Thread.CurrentThread.IsThreadPoolThread +";" + Thread.CurrentThread.ManagedThreadId);
    
                var file = Assembly.GetExecutingAssembly().Location + ".config";
                var dep = new CacheDependency(file);
    
                //==*****使用单个池线程************************//
                //ThreadPool.QueueUserWorkItem((o) =>
                //{
                //    while (true)
                //    {
                //        if (dep.HasChanged)
                //        {
                //            Console.WriteLine(string.Format("是否池线程:{0};线程编号:{1}",Thread.CurrentThread.IsThreadPoolThread , Thread.CurrentThread.ManagedThreadId));
                //            Console.WriteLine(string.Format("在:{0}发生更改,这里加入需要处理代码!", dep.UtcLastModified));
    
                //            Console.WriteLine("接着开始休息3秒");
                //            Thread.Sleep(3000);
                //            //dep = new CacheDependency(file);
                //        }
                //        Thread.Sleep(100);
    
                //    }
                //});
    
                //==*****Timers Timer 使用池线程,多线程方式 ***********//
                //var t = new System.Timers.Timer();
                //t.Interval = 500;
                //t.Elapsed += (s,ie) => {
    
                //        if (dep.HasChanged)
                //        {
                //            t.Enabled = false; //通过设置Enabled属性来控制按串行还是并行方式触发事件
                //            Console.WriteLine(string.Format("是否池线程:{0};线程编号:{1}", Thread.CurrentThread.IsThreadPoolThread, Thread.CurrentThread.ManagedThreadId));
                //            Console.WriteLine(string.Format("在:{0}发生更改,这里加入需要处理代码!", dep.UtcLastModified));
                         
                //            Console.WriteLine("接着开始休息3秒");
                //            Thread.Sleep(3000);
                //            t.Enabled = true;
                //            //dep = new CacheDependency(file);
    
                            
                //        }
                       
                //};
                //t.Start();
    
                //==******winform Timer 使用UI线程,单线程方式**********//
                //var winfrmT = new System.Windows.Forms.Timer();
                //winfrmT.Interval = 500;
                //winfrmT.Tick += (s, ie) =>
                //{
                //        if (dep.HasChanged)
                //        {
                //            
                //            Console.WriteLine(string.Format("是否池线程:{0};线程编号:{1}", Thread.CurrentThread.IsThreadPoolThread, Thread.CurrentThread.ManagedThreadId));
                //            Console.WriteLine(string.Format("在:{0}发生更改,这里加入需要处理代码!", dep.UtcLastModified));
    
                //            Console.WriteLine("接着开始休息3秒");
                //            Thread.Sleep(3000);
                //            //dep = new CacheDependency(file);
                //        }
    
                //};
                //winfrmT.Start();
    
                //==*****Threading Timer 使用池线程,多线程方式********//
                var threadT = new System.Threading.Timer((o) =>
                {
                    if (dep.HasChanged)
                    {
                       
                        //==//如果当前线程被占用该timer会起用新的线程
                        Console.WriteLine(string.Format("是否池线程:{0};线程编号:{1}", Thread.CurrentThread.IsThreadPoolThread, Thread.CurrentThread.ManagedThreadId));
                        Console.WriteLine(string.Format("在:{0}发生更改,这里加入需要处理代码!", dep.UtcLastModified));
    
                        Console.WriteLine("接着开始休息3秒");
                        Thread.Sleep(3000);
                        //dep = new CacheDependency(file);
    
    
                    }
                },
                null, 250, 500);
    
               
    
            }

    2.采用System.Web下的缓存处理组件

    View Code
            public static string GetSetting(string name, string defV)
            {
                if (!Config.AppSettings.Settings.AllKeys.Contains(name)) return defV;
                return Config.AppSettings.Settings[name].Value;
            }
            public static string ModelConnString
            {
                get
                {
    
                    return Config.ConnectionStrings.ConnectionStrings["xxxEntities"].ConnectionString;
                }
            }
    
    
            public static string ConnString
            {
                get
                {
    
                    return Config.ConnectionStrings.ConnectionStrings["ConnString"].ConnectionString;
                }
            }
            private static Configuration  Config
            {
                get
                {
                    
                    var _Config = HttpRuntime.Cache["_Config"] as Configuration;
                    if (_Config == null )
                    {
                        var fileMap=new ExeConfigurationFileMap();
                        fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + ".config";
                       _Config= ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
                      var fileCacheDep = new CacheDependency(fileMap.ExeConfigFilename);
    
                      System.Web.HttpRuntime.Cache.Add("_Config", _Config, fileCacheDep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.High, null);
    
                    }
                    return _Config;
                }
            
            }

    3.注意 System.Threading.Timer 使用局部变量时可能会被回收,其他两个貌似没问题(参考clr+via+第3版p466)

  • 相关阅读:
    ZINTERSTORE — Redis 命令参考
    Wombat vim colorscheme – customized Chronosbox
    我的vim colorscheme 白色之夜 博客园
    Python list of class attributes Python
    vim配色方案colorscheme设置
    colorscheme install
    Python类中的私有成员(私有函数,私有变量)
    Pebble Overview
    用python 发送邮件
    Python发送带附件的Email
  • 原文地址:https://www.cnblogs.com/wdfrog/p/2560707.html
Copyright © 2011-2022 走看看