本帖最后由 lwf8758 于 2011-06-19 20:54:37 编辑

解决方案 »

  1.   

    关于Timer的使用,最小间隔不小50ms
      

  2.   

    再说,进入Timer的Tick事件后,要停留50ms,而间隔只有1ms,还没执行完毕就又进入Tick事件(当然不会这样),但是从事件中出来又会立即进入,根本没有执行其它程序的时间,所以设想的功能无法实现,这种情况我也是尝试过的。
      

  3.   

    Timer控件很奇怪。
    PropertyGrid类似于一个设计器功能,他后面要调用Converter和Editor好多内容。
      

  4.   

    你用的肯定是System.Windows.Forms.Timer.这个TImer是跑在主线程的,如果Timer的Tick事件耗时太多会导致界面卡死。你的情况应该使用System.Timers.Timer如下代码供参考:
        public partial class Form1 : Form
        {
            System.Timers.Timer timer2 = new System.Timers.Timer(1000);        public Form1()
            {
                InitializeComponent();
                timer2.Interval = 1000;
                timer2.Elapsed += new System.Timers.ElapsedEventHandler(timer2_Elapsed);
            }        void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                Thread.Sleep(2000);
            }        private void button1_Click(object sender, EventArgs e)
            {
                timer2.Start();
            }
        }
      

  5.   


    你好,timer奇怪在哪里呢,又和PropertyGrid对Converter和Editor的调用有什么联系?谢谢!
      

  6.   

    注意!
    这样的Timer的事件是跑在线程池里的,所以要考虑同步和互斥
      

  7.   

    谢谢你!我用的timer的确是winform.timer,这个timer基于消息,
    在耗时多的情况下其它所有的控件都能正常响应,但是就是PropertyGrid的下拉列表死了
    我的工程是单线程的不能保证timer中跑的内容线程安全,
    也不能给每次界面操作都加锁,工程太大了。。呵呵
      

  8.   

    我们团队曾经用过一个号称很厉害的软件硕士,它做的东西很简单,在需求上就是捕获当用户拖动窗口时要判断是否要将窗口自动停靠到windows边栏。结果呢,一个50毫秒的计时器,吃饱了撑地,不断地中断程序去计算。你觉得他能留在团队么。他是靠关系进来的,但是给团队带来了不少灾难。关键原因就是胡乱搞程序,学校里作为花孔雀的那一套表演做法。
      

  9.   

    啊谢谢!
    其实50毫秒的耗时是一个3D引擎在不断绘制非常复杂的场景,帧率不很高但是也能接受,
    这个界面是3D编辑器的一部分,它会因为timer的一个比较长的延迟而阻塞掉让我很头痛。
    想在不大改整个编辑器的前提下搞掉这个小小的问题,呵呵