winform一个窗体控制多个独立的进程

小剑要加油 2014-09-15 01:12:22

如上图,这些程序都是同一个exe,但是做的事情不一样,但是这么多界面很占内存。
所以,我想新做一个主窗体,把这些程序的界面去掉,作为后台进程开启。
这个主窗体负责开启和关闭这些进程,并且能访问每个进程的对象数据。
本来我想着用线程开启多个进程。但是这样会影响这些进程的执行效率吧?
我就想实现取消这些占资源的界面,但是每个进程的执行速度和单独一个exe执行速度要一样
...全文
1356 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_24720945 2016-12-12
  • 打赏
  • 举报
回复
请问你这个问题是怎么解决的,能不能说下方法
小剑要加油 2014-10-09
  • 打赏
  • 举报
回复
先结贴吧,我找到很多思路了,用命令管道
林英南 2014-10-08
  • 打赏
  • 举报
回复
引用 36 楼 xiaojianshiajie11 的回复:
[quote=引用 35 楼 linyingnan 的回复:] [quote=引用 34 楼 xiaojianshiajie11 的回复:] [quote=引用 33 楼 Z65443344 的回复:] 你的意思是,不想改你做好的61个程序 而是再用第62个程序,把那61个程序嵌入到界面里,是这意思吗? 不行就把那些做成DLL,然后嵌入进来呗.
不是把61个程序嵌入,而是这61个进程是单独的,第62个界面可以显示和管理这61个进程的状态[/quote] 如果每个进程的功能是一致的,用多线程就可以了,没必要做这么复杂的设计,性能各方面也不会有啥影响;如果是不同功能的话,直接用Process去启动跟控制就好了[/quote] 这样不好吧?本身每个 进程自己都会开大量的多线程,如果把每个进程的代码整合到一个进程里,用线程列表管理这样真的不好吧???[/quote] 模块化不就行了,如果你每个进程的任务都是一样的话,那么进程内的线程实现不都一样么?再不济用事件管理呗,自己写个管理的类跟实现分离开就好了
小剑要加油 2014-10-08
  • 打赏
  • 举报
回复
引用 35 楼 linyingnan 的回复:
[quote=引用 34 楼 xiaojianshiajie11 的回复:] [quote=引用 33 楼 Z65443344 的回复:] 你的意思是,不想改你做好的61个程序 而是再用第62个程序,把那61个程序嵌入到界面里,是这意思吗? 不行就把那些做成DLL,然后嵌入进来呗.
不是把61个程序嵌入,而是这61个进程是单独的,第62个界面可以显示和管理这61个进程的状态[/quote] 如果每个进程的功能是一致的,用多线程就可以了,没必要做这么复杂的设计,性能各方面也不会有啥影响;如果是不同功能的话,直接用Process去启动跟控制就好了[/quote] 这样不好吧?本身每个 进程自己都会开大量的多线程,如果把每个进程的代码整合到一个进程里,用线程列表管理这样真的不好吧???
林英南 2014-10-08
  • 打赏
  • 举报
回复
引用 34 楼 xiaojianshiajie11 的回复:
[quote=引用 33 楼 Z65443344 的回复:] 你的意思是,不想改你做好的61个程序 而是再用第62个程序,把那61个程序嵌入到界面里,是这意思吗? 不行就把那些做成DLL,然后嵌入进来呗.
不是把61个程序嵌入,而是这61个进程是单独的,第62个界面可以显示和管理这61个进程的状态[/quote] 如果每个进程的功能是一致的,用多线程就可以了,没必要做这么复杂的设计,性能各方面也不会有啥影响;如果是不同功能的话,直接用Process去启动跟控制就好了
小剑要加油 2014-10-08
  • 打赏
  • 举报
回复
引用 33 楼 Z65443344 的回复:
你的意思是,不想改你做好的61个程序 而是再用第62个程序,把那61个程序嵌入到界面里,是这意思吗? 不行就把那些做成DLL,然后嵌入进来呗.
不是把61个程序嵌入,而是这61个进程是单独的,第62个界面可以显示和管理这61个进程的状态
於黾 2014-10-08
  • 打赏
  • 举报
回复
你的意思是,不想改你做好的61个程序 而是再用第62个程序,把那61个程序嵌入到界面里,是这意思吗? 不行就把那些做成DLL,然后嵌入进来呗.
小剑要加油 2014-10-08
  • 打赏
  • 举报
回复
引用 24 楼 Z65443344 的回复:
搞多进程是有目的性的,绝对不是为了解决"快"和"卡"的问题 就我用过的软件,多进程都是为了把功能完全分开,用户不需要的功能直接可以不安装 如果你的软件无论如何都需要这些功能完整,那么多进程和多线程没有区别
其实也不只是说想要解决卡的问题。是这样的, 因为每个winform界面都有自己的数据显示,程序多了,想要查看指定的一个查看不方便, 我现在就是想去掉这些界面,只需要新开发一个winform界面,像任务管理器一样可以查看其它所有其它winform的状态和数据。 其它程序以进程方式启动。请问这个要怎么实现
joyhen 2014-09-30
  • 打赏
  • 举报
回复
亲,你这思路不对啊
於黾 2014-09-30
  • 打赏
  • 举报
回复
电脑相当于公司 进程相当于部门 线程相当于员工 你想任务执行的快,不卡,一个任务当然不能只用一个人去做,而是交给多个人去做 如果你要交给多个部门去做,也不是不可以 但是这个跟你一个负责人,不断的去创建部门,然后让部门去工作 和你先弄好多个负责人,每个人再去创建部门,他俩究竟有什么区别?
於黾 2014-09-30
  • 打赏
  • 举报
回复
如果你确定是要多进程 反正也是在其他进程了,你用一个线程循环开启,和先循环启动N个线程,再每个线程启动一个进程,有什么区别啊...
lonyjianhui 2014-09-30
  • 打赏
  • 举报
回复
1本来我想着用线程开启多个进程。但是这样会影响这些进程的执行效率吧?-- 我可以告诉你,除非你的机子太过时了,否则,请忽略这点儿效率吧。我刚刚开发了一个任务调度平台,任务可随意添加,使用多线程启动任务,现在已经多达36个任务,24小时不停地跑,一点问题也没有出现过; 2感觉你的需求(解决卡,并互不影响),就是多线程的应用,而想使用多进程,不太合理,毕竟多进程解决的问题场景跟你的需求相关性不大。 3如需访问每个子任务(你所说的进程)的数据,最好是任务提供接口,这样速度快,如果使用这种方式,建议你参考下插件式开发,并结合任务调度平台。
feixuyue 2014-09-30
  • 打赏
  • 举报
回复
我以前也想过,空间里有例子。
於黾 2014-09-30
  • 打赏
  • 举报
回复
再看数据库客户端和360等杀毒软件 也是多进程,每个进程执行特定的功能 你不需要的功能,在安装的时候就可以不安装 而如果安装了,多进程之间又有交互 比如一个进程点击按钮,打开另一个进程,并传递参数
於黾 2014-09-30
  • 打赏
  • 举报
回复
多进程的另一个应用, 是逻辑其实都是以服务的形式在执行 而有时候又需要监视数据 那么需要另一个用户进程来与服务进程通信 服务没有界面,用户进程有界面 在用户进程里可以启动或停止服务,可以监视服务的运行情况,可以关闭用户进程,而不影响服务的运行
於黾 2014-09-30
  • 打赏
  • 举报
回复
搞多进程是有目的性的,绝对不是为了解决"快"和"卡"的问题 就我用过的软件,多进程都是为了把功能完全分开,用户不需要的功能直接可以不安装 如果你的软件无论如何都需要这些功能完整,那么多进程和多线程没有区别
卧_槽 2014-09-30
  • 打赏
  • 举报
回复
引用 22 楼 xiaojianshiajie11 的回复:
[quote=引用 18 楼 yuwenge 的回复:] [quote=引用 16 楼 caozhy 的回复:] 先不考虑怎么实现,你搞那么多进程这个想法就有问题。
Chrome就搞那么多进程,不知道他们的想法有什么问题。[/quote] 其实我的客户端呢,也是类似的功能,做的事情一样,但是都是分工做的,互不影响。所以应该不能用一个程序多个线程来控制单独的模块,这样会导致cpu的分配上没有单独一个进程合理吧?执行的效率肯定会下降吧?就是卡之类的吧?[/quote] IE11并不比Chrome卡,IE11也只有一个进程。 卡不卡不是简单的分开进程就能达到的。 如果你是这个目的,乘早打消分进程的打算。
小剑要加油 2014-09-29
  • 打赏
  • 举报
回复
引用 18 楼 yuwenge 的回复:
[quote=引用 16 楼 caozhy 的回复:] 先不考虑怎么实现,你搞那么多进程这个想法就有问题。
Chrome就搞那么多进程,不知道他们的想法有什么问题。[/quote] 其实我的客户端呢,也是类似的功能,做的事情一样,但是都是分工做的,互不影响。所以应该不能用一个程序多个线程来控制单独的模块,这样会导致cpu的分配上没有单独一个进程合理吧?执行的效率肯定会下降吧?就是卡之类的吧?
小剑要加油 2014-09-29
  • 打赏
  • 举报
回复
引用 19 楼 truediego 的回复:
把那么多个带界面的程序都废掉,然后只留着核心处理,生成exe 在你的主进程(带界面的)里面,弄个table,每行用Process启动一个个exe就行了 如果exe个数不固定,或者动态的,就加个设定画面,设置启动哪个exe,参数是什么 如果各个进程之间没有数据交换的话,就简单给每个进程设置个互斥文件锁,用来判断死活就行了 ------------------------------------------ 进程名 | 启动exe | 操作 | 状态 事情1 | A.exe | 启动/停止/设定 | 运行中 事情2 | B.exe | 启动/停止/设定 | 停止中
你的思路和我能想到的思路功能是一样的。但是就是进程的管理不熟,不会用。能不能有这方面的资料推荐?谢过。
小剑要加油 2014-09-29
  • 打赏
  • 举报
回复
引用 13 楼 dongxinxi 的回复:
可以考虑将有一定相关性的做成一个应用程序 然后将这些应用程序的界面放在一个一主界面中进行开关控制 至于数据通信方法就多了,如MemoryMappedFile.CreateNew() 内存映射,命名管道,socket, com组件(这个在Net时代就不推荐用了)
谢谢你啊,你给的知识点我会研究研究,我对winform的认识也不够深。对进程的管理也不会用。如果能推荐一些关于解决我说的这个问题的专题讲解就好了。
加载更多回复(19)

110,531

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧