c# 多线程求助,急,本人目前在用多线程处理数据,窗体应用程序。但是一直有个问题不大明白。
我想创建一个起监控某窗体某个控件作用的线程,比如当某项计算量比较大的任务执行完后,button按钮的属性就变得可用了,没执行完这个任务按钮属性为不可用。现在的问题是监控线...
我想创建一个起监控某窗体某个控件作用的线程,比如当某项计算量比较大的任务执行完后,button按钮的属性就变得可用了,没执行完这个任务按钮属性为不可用。现在的问题是监控线程要在整个程序运行下一直存在,才能起到实时监控的任务,具体在窗体类里面创建线程还是在program.cs类创建该线程更合适?如果在窗体类里的事件方法里创建线程,很容易阻塞UI线程更新界面啊。本人菜鸟,感谢各位大侠引路指点,急等。
展开
展开全部
使用BackgroundWorker吧,这是个异步的线程操作类,很方便的就能实现你说的方法,不需要阻塞什么东西的
更多追问追答
追问
哦,您好大侠,感谢您热心的帮助提示,不过现在又遇见了个新问题,希望能的到你的指点。我这个程序设计思路比较简单,程序运行后,除了运行窗体线程,program.cs类里定义了个静态的新线程,以及相应的图片数据处理的方法(这个方法处理数据量不小,像素图遍历访问创建缩略新图)主函数入口启动该线程,也就是说主函数启动窗体UI线程的同时也启动了那个数据处理线程。为了让线程一直存在不执行完,线程调用的方法里面有个死循环。
追答
不明白你说的意思,能所简明一些,你想干嘛,问题是啥
展开全部
窗体类里创建线程吧!便于随时进行状态管理。具体的不是很清楚你需要多线程执行的任务是什么,有多少,可能会创建多少个副线程?
追问
嘿嘿,多线程同时执行一些处理数据比较大的任务,处理的结果及时更新在窗体界面上,比如图像的更新。如果不用多线程而是单一的写在事件里,比如单击事件,用户界面的其他更新就觉得很慢,所以防止阻塞UI线程,我想不在窗体类里面开启多线程,而是在其他非窗体类里启动线程。其实我现在了解到backguand就是专门解决这类问题的,这样在窗体类里就执行大任务也不会阻塞界面了。
追答
一般的数据处理用backguand确实够用了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不太明白你的意思,你所谓计算量比较大的任务也是在某个线程呢循环做的?
更多追问追答
追问
嗯,是的,我在一个线程里启动,线程在程序运行过程通过死循环一直存在,特定条件下触发调用新线程执行计算量比较大的方法,一般情况下sleep.这个线程实现了我想要的图片处理结果,并且没有影响UI线程的界面响应,所以我很疑惑,我这种思路大家认同吗?
追答
你想的复杂了吧。你的第一个启动的线程里直接循环做你的大方法,每次计算完后修改画面按钮的属性。因为你重新开一个线程去监听按钮,也是要等到前面的线程计算完后才有新的值反应,所以没什么必要用另外的线程去监听。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询