兄弟们,有没有更好的方法来解决这个进程等待的问题

linuxyf 2005-07-18 09:10:59
我在一个程序(A)里启动另外一个程序(B),启动后则等待启动程序(B)的结束,如果B结束了,A才继续往下执行.
这是我的一个实现方案,看看大家没有有更好的解决方案,谢谢!
...全文
221 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
linuxyf 2005-07-21
  • 打赏
  • 举报
回复
wangsaokui(无间道III(MSMVP)),你说我开头的方案是否在实际中是可行的,

因为我要等到那个进程结束才开始继续后面的操作。

我想问一下,如果采用remoting方式,启动另一个程序以后,如何等待判断其结束呢?
wangsaokui 2005-07-21
  • 打赏
  • 举报
回复
你可以在B程序中返回一个值,返回的方式可以是remoting,MSMQ,或者socket,总之是A和B都能接收和访问的一个中间介质,A接收到后继续执行
linuxyf 2005-07-20
  • 打赏
  • 举报
回复
wangsaokui(无间道III(MSMVP)) ,你给出的解答感觉像是线程间的调用,
而我是启动了一个进程,也可以一步调用吗? 对异步委托不熟,所以有此一问.
linuxyf 2005-07-20
  • 打赏
  • 举报
回复
不知 孟子E章和思归兄有没有高见啊?
linuxyf 2005-07-19
  • 打赏
  • 举报
回复
还有没有不同的解决方案
woyaomoney 2005-07-19
  • 打赏
  • 举报
回复
同意楼上
lw8122 2005-07-19
  • 打赏
  • 举报
回复
根据你的需求,没必要再启用一个线程,在主线程做就可以了。
lovelxj 2005-07-19
  • 打赏
  • 举报
回复
这样最好重新启动一个线程
因为在等待外部进程的过程需要等待好久直到外部进程关闭
在等待过程中程序界面都无法正常显示

所以建议另开一个线程,在这个线程中等待外部进程完成时触发一个委托
koenemy 2005-07-19
  • 打赏
  • 举报
回复
可行的。
最好别改,改以后占用内存太多了去干活,还是间隔一段时间比较好。
linuxyf 2005-07-19
  • 打赏
  • 举报
回复
怎么没人发表意见啊
wangsaokui 2005-07-19
  • 打赏
  • 举报
回复
异步委托
比方说
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconasynchronousdelegatesprogrammingsample.htm

AsyncCallback 委托用于指定在开始操作完成后应被调用的方法。AsyncCallback 委托被作为开始操作上的第二个到最后一个参数传递:

public delegate void AsyncCallback(IAsyncResult ar);


声明
public static ManualResetEvent allDone = new ManualResetEvent(false);

B启动后先allDone.waitOne阻塞线程;B执行完后把allDone.Set(),让线程继续执行
linuxyf 2005-07-18
  • 打赏
  • 举报
回复
senkiner(金龍) ,可以改,但改后为什么可以,我也不是很清楚,还有没有其它的解决方案?
cdo 2005-07-18
  • 打赏
  • 举报
回复
up
senkiner 2005-07-18
  • 打赏
  • 举报
回复
可以把
while(Proc.HasExited == false)
{
Proc.WaitForExit(1000);
}
改为
Proc.WaitForExit()
吗?
linuxyf 2005-07-18
  • 打赏
  • 举报
回复
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
Info.FileName = "notepad.exe";
Info.Arguments = "test.txt";
Info.WorkingDirectory = "C:\\";
System.Diagnostics.Process Proc ;
try
{
Proc = System.Diagnostics.Process.Start(Info);
}
catch(System.ComponentModel.Win32Exception e)
{
Console.WriteLine("系统找不到指定的程序文件。\r{0}", e);
return;
}
while(Proc.HasExited == false)
{
Proc.WaitForExit(1000);
}
Console.WriteLine("String is ok");
}

110,534

社区成员

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

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

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