假如现在触发了事件,进入事件的运行函数。但函数还没执行完,该事件又触发了。。请问下会咋么样啊?事件和单片机下的中断是不是差不多啊。

解决方案 »

  1.   

    事件和中断不同,单片机中断处理应该是不能重入的,但事件是可以重入的,如果一次事件处理没有执行完就产生另一个事件,那么有可能在另一个线程中重入,至少对于timer事件是如此,
      

  2.   

    单线程程序不会出现一个事件没有处理完,又触发一个事件的情况。你会发现界面会死掉,无法移动,也无法按按钮。有一个函数很特殊,就是DoEvents(),它会使得单线程程序看上去在处理一个事件的时候还能继续响应。但是实际上,程序不过是在调用事件处理函数的时候调用了DoEvents(),在DoEvents()中调用了新的事件处理函数,新触发的事件处理函数作为前一个的子程序被调用。并非函数重入,但是对于使用了公共变量的程序,那么这些值会被子程序修改。
      

  3.   

    timer有几个,一个是thread下的timer,它的确是多线程的。另一个是windows.forms下的,它封装的是API SetTimer 和 WM_TIMER,利用消息工作,它是单线程的。
      

  4.   

    DoEvent()会影响效率,如果数据少的话可以可虑使用,多的话建议不要使用