yujun199901 发表于 2019-7-19 10:45

C#winform编程中多线程问题,定时器问题,句柄问题

本帖最后由 yujun199901 于 2019-7-31 11:40 编辑

本人在公司使用C#winform进行开发,开发过程中遇到了一些问题,求助大佬们的帮助
问题一:多线程问题
             我所开发的c/s架构的软件,其中一个界面的功能是,每隔3秒通过http协议的post请求方式发送一段数据到对应的设备主机中,主机返回一串数据,客户端解析数据,反馈到用户界面上.
设备主机上有多个设备,每个设备都有对应的设备id,每个设备都有单独的自定义控件.由于有要求每个设备都要每隔3秒都要查询数据,于是我在自定义控件时,使用了timer这个控件,达到每隔
3秒查询一次的效果,为了防止用户界面卡死,我在timer_strat中使用的方法是多线程的方式.Thread thread=new thread(GetDevicestratus);thread.isbackground=ture;thread.start();之后我在用户
自定义控件中定义了一个方法UserController_VisibleChanged;这个事件中执行了判断UserController.Visible为false就执行---->timer1.stop();这个方法.终止了这个每隔3秒进行查询的功能,然而
在我通过资源管理器中查看在我切换界面后并没有终止查询,并且界面来回切换后,程序所占的cpu资源变得更加的多了.

问题二:定时器-------问题一有关
               有没有更好的实现3秒一查的好方法.求助大佬,

               
问题三:句柄问题------问题一有关
            当我关闭程序时,vs开发工具中会产生一个this.invoke();的问题这个现实没有不能.invoke或者beginInvoke();的提示,如何解决



我的表达能力有限还望谅解--------------------------------------------------------------如果有我没讲清楚的地方请在评论区中@我,我看到了就会回复谢谢.

dushulang 发表于 2019-7-19 11:00

谢谢分享

key168863 发表于 2019-7-19 11:16

最好使用quartznet和Hangfire组件,来处理多线程,多任务问题

wangluo920 发表于 2019-7-19 11:23

作为初学者,我认为切换窗口不是改变Visible属性吧,所以通过这个属性判断停止,自然不成立,所以没停止。切换窗口应该改变的是激活状态或者控件焦点吧

三水非冰 发表于 2019-7-19 11:38

.net不止一种timer,尝试一下其他的timer。

yujun199901 发表于 2019-7-19 15:59

wangluo920 发表于 2019-7-19 11:23
作为初学者,我认为切换窗口不是改变Visible属性吧,所以通过这个属性判断停止,自然不成立,所以没停止。 ...

我的切换窗口是将承载该用户自定义控件的panel控件的visible设备为false,我之前好像看过一篇文章,好像是说,父级的visble值会向子对象传递.从而改变自定义控件的visible的值

wjshan0808 发表于 2019-7-21 21:42

看一下你写的代码,应该能更好的为你解决问题

yujun199901 发表于 2019-7-22 09:13

本帖最后由 yujun199901 于 2019-7-22 09:24 编辑

wjshan0808 发表于 2019-7-21 21:42
看一下你写的代码,应该能更好的为你解决问题
公司的代码,我没有权利放出来,要是有啥,我还没讲清除的,你问我,我会回答的...
:'(weeqw

wjshan0808 发表于 2019-7-30 23:37

哎,不怪楼主,鄙人不才只能看代码解决问题呀{:1_936:}

tomemouse 发表于 2019-9-8 13:16

哎,不怪楼主,鄙人不才只能看代码解决问题呀
页: [1]
查看完整版本: C#winform编程中多线程问题,定时器问题,句柄问题