日期:2014-05-16  浏览次数:20982 次

控制台程序里面,Timer.BeginInit()/EndInit()会有什么作用吗?
下面这段代码,编译运行,一直处于等待状态,按下了任意按钮的效果是直接退出,根本不打印任何东西。

        static void Main(string[] args)
        {
            var m = new Timer(1000);
            m.Elapsed += (source, e) => { Console.WriteLine("Timer"); };
            m.Start();
            m.BeginInit();//去掉这句就能不断的打印
            Console.ReadKey();
        }

这个m.BeginInit()会影响一个已经Start了的Timer吗? 我看MSDN上面说这个函数是windows应用程序才有用,那么在控制台程序里面,该函数调用会产生什么样的影响呢?
------解决方案--------------------
BeginXXX EndXXX
在.Net Framework里通常的作用是开始一个批处理运行和结束批处理运行

也就是说 在Begin 和 End之间, 通常会是一系列大量的操作
但这些操作都会被缓冲 直到你执行了End 才会被执行.

呃 还真不好表述 我上面的说法也不准确 也不好理解

这样吧 以windows Form举例 在Design文件中 通常会有初始化窗体控件并添加到窗体中的部分
仔细观察其前后 就有Begin和End的身影
因为每次添加控件 都会引起重绘 这样会造成窗体闪烁
而有了Begin 和 End 它会阻断重绘 当所有控件添加完成 执行End 窗体就只需要绘制一次所有控件了
这个应该好理解一些吧