美文网首页
改进关闭程序的机制,为之后储存数据铺路2018-12-06

改进关闭程序的机制,为之后储存数据铺路2018-12-06

作者: FDuiv | 来源:发表于2018-12-07 00:41 被阅读0次

    1、今天查了下ManualResetEvent类的用法,他是可以在一个线程控制另一个的信使,

    那样就可以用WaitOne,Set,Reset组合出某个线程在某个设定好的语句中进行阻塞,实现线程同步:

    图1

    因此关闭程序的时候,所有线程阻塞完毕后,可以进行存储数据操作:

    图2

    2、另外,似乎windows窗体程序都需要一个主窗口,然而为了更好的管理窗口,和优化程序速度,

    我把每个窗口都用各自的线程运行,一个窗口一个线程:(主函数)

    图3

    但是这就涉及到了跨线程通讯问题,例如我要关闭一个窗口后其他窗口都关闭,

    就需要在一个线程调用另一个线程的方法,

    微软是禁止这样做的,然而这行代码:

    Control.CheckForIllegalCrossThreadCalls = false;

    可以忽略警告,但是存在即合理,CheckForIllegalCrossThreadCalls 这个属性的定义,它是一个static的,一旦修改,全局起作用。如果项目中其他人修改了这个属性,那么方案就失败了,要采取另外的方案;

    所以我用了委托:

    图4

    两个窗口互相把关闭窗口的函数委托给对方,就可以做到关闭一个窗口后其他窗口都关闭的操作;

    但是又有一个问题,相互调用的本质就是无限递归了,如何退出递归,很简单,让这个函数只运行一次:

    图5

    创建一个私有变量来记录;

    当窗口状态为false的时候,关闭其他窗口的函数便不再运行;

    上一篇日记:增加了一个删除功能和修复了一个bug2018-12-05

    下一篇日记:准备更多2018-12-09

    相关文章

      网友评论

          本文标题:改进关闭程序的机制,为之后储存数据铺路2018-12-06

          本文链接:https://www.haomeiwen.com/subject/xgcacqtx.html