c#winform两个程序如果判断另一个程序有没有执行完?

zzyhost 2016-12-23 11:12:44
举例,A、B是同一个程序,同时打开而已
A程序点击按钮开始执行代码(假如要执行1分钟),如果A没执行完那么在B程序点击这个按钮会提示要等A执行完才能执行
如何办到?
...全文
301 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿领巾童鞋 2016-12-24
  • 打赏
  • 举报
回复
引用 11 楼 u013402605 的回复:
[quote=引用 10 楼 chenandczh 的回复:] 要满足程序间访问资源的条件,这个资源可以是本地文件、或者网络通讯、或者数据库、中间件等等。 由于楼主没有写明程序运行的环境(例如,程序是同一台电脑还是不同电脑,不同电脑的时候是同局域网还是不同网段,每种情情况能实现的条件都不一样),所以,这个不好回答。
同一台电脑,不能用写文件写标识的方法,万一用户程序没来得急写就关了就乱套了,不知道Mutex 行不行,我正在看[/quote] 哥们,同一台电脑处理的,建议你用多线程,场景没那么复杂的,只是你把他想得太复杂了。
zzyhost 2016-12-24
  • 打赏
  • 举报
回复
引用 10 楼 chenandczh 的回复:
要满足程序间访问资源的条件,这个资源可以是本地文件、或者网络通讯、或者数据库、中间件等等。 由于楼主没有写明程序运行的环境(例如,程序是同一台电脑还是不同电脑,不同电脑的时候是同局域网还是不同网段,每种情情况能实现的条件都不一样),所以,这个不好回答。
同一台电脑,不能用写文件写标识的方法,万一用户程序没来得急写就关了就乱套了,不知道Mutex 行不行,我正在看
绿领巾童鞋 2016-12-24
  • 打赏
  • 举报
回复
要满足程序间访问资源的条件,这个资源可以是本地文件、或者网络通讯、或者数据库、中间件等等。 由于楼主没有写明程序运行的环境(例如,程序是同一台电脑还是不同电脑,不同电脑的时候是同局域网还是不同网段,每种情情况能实现的条件都不一样),所以,这个不好回答。
圣殿骑士18 2016-12-24
  • 打赏
  • 举报
回复
想想你方案合理不合理。为什么不用多线程?
白衣如花 2016-12-23
  • 打赏
  • 举报
回复
赵四老师的方法:写文件。。。 一个执行完,写文件,另一个读取,读取完,删掉
念叨悠悠 2016-12-23
  • 打赏
  • 举报
回复
加一个标识,当代码执行完毕后改变标识,另一段代码判断标识。(个人愚见)
crystal_lz 2016-12-23
  • 打赏
  • 举报
回复
那你为什么要启动两个程序呢? 启动一个不就好了
t_kong 2016-12-23
  • 打赏
  • 举报
回复
引用 7 楼 u013402605 的回复:
[quote=引用 5 楼 t_kong 的回复:]

var processes = Process.GetProcesses();
 var thisprocess = processes.First(x => x.ProcessName == processname);

if (thisprocess.Responding){}
直接訪問進程是否有回應。就知道進程是否關閉了。
答非所问,[/quote] 只看題目就答題了,沒看內容。 那個... ...你可以搜一下【單例模式】。你要的東西用這個模式能實現。
zzyhost 2016-12-23
  • 打赏
  • 举报
回复
引用 5 楼 t_kong 的回复:

var processes = Process.GetProcesses();
 var thisprocess = processes.First(x => x.ProcessName == processname);

if (thisprocess.Responding){}
直接訪問進程是否有回應。就知道進程是否關閉了。
答非所问,
  • 打赏
  • 举报
回复
简单点,开一个,然后在那个里面用 Task.Run(() => { var proc = Process.Start(xxx); proc.WaitForExit(); 设置你的标记 }); 在按钮点击那里判断标记,或者直接 if(proc != null) { proc.WaitForExit(); proc = null; } 你用EventHandle之类的也可以
t_kong 2016-12-23
  • 打赏
  • 举报
回复

var processes = Process.GetProcesses();
 var thisprocess = processes.First(x => x.ProcessName == processname);

if (thisprocess.Responding){}
直接訪問進程是否有回應。就知道進程是否關閉了。
欧尔迈特1994 2016-12-23
  • 打赏
  • 举报
回复
用通信的办法解决,socket或者remoting都可以,如果在同一台电脑上就是一个IP两个端口,B程序建一个线程监听A程序,A程序执行完毕,向B程序发送信号,B程序收到之后将是否可以执行的变量设为"true",解决了。你试试有问题可以再问。

111,125

社区成员

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

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

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