关于Process打开外部程序遇到的问题,在线急等,解决就给分!
我在程序的加载项frm_Load下写了下面这段代码,实现在加载程序的同时打开指定外部应用程序Kk.exe
//声明一个程序信息类
ProcessStartInfo Info = new ProcessStartInfo();
//设置外部程序名
Info.FileName = "Kk.exe";
//设置外部程序工作目录
Info.WorkingDirectory = Application.StartupPath;
//声明一个程序类
Process Proc;
try
{
//
//启动外部程序
//
Proc = Process.Start(Info);
//等待3秒钟
Proc.WaitForExit(3000);
}
kk.exe打开了,它弹出一个对话框(这个对话框不重要),我的程序好像就没加载了,关闭这个对话框后,程序的界面又显现出来。
怎么可以实现,打开kk.exe后,它的弹出对话框不影响我的程序运行??
------解决方案--------------------那你就不要在load中加载程序就是了。
------解决方案--------------------你单步调试下,看程序在Proc = Process.Start(Info); 是否继续执行
------解决方案--------------------你自己中断了程序执行,在等待呢,你的界面当然是白的。
Proc.WaitForExit(3000);
Process.WaitForExit 方法:
设置等待关联进程退出的时间,并在该段时间结束前或该进程退出前,阻止当前线程执行。
重载列表
Process.WaitForExit () 指示 Process 组件无限期地等待关联进程退出。 由 .NET Compact Framework 支持。
Process.WaitForExit (Int32) 指示 Process 组件在指定的毫秒数内等待关联进程退出。 由 .NET Compact Framework 支持。
------解决方案--------------------哦,就是VB6经常用到的Shell(),不好意思。
命名空间: Microsoft.VisualBasic
模块: Interaction
程序集: Visual Basic Runtime Library(在 Microsoft.VisualBasic.dll 中)
你打开你的MSDN,索引[Shell 函数],就有你的答案了。
------解决方案--------------------To Q69524898
我进一步对程序进行了测试,上面的代码没有问题,问题应该是这样:
我用SendMessage(EdithWnd, WM_CLICK, (IntPtr)0, "0");点击了一个外部程序的确定按钮,外部程序弹出一个对话框,我的程序就没有反应了(界面上的任何控件都不能使用),必须关闭弹出的这个对话框,程序才能继续!
这个是怎么回事呢??我的程序怎样才不受这个弹出对话框的影响?SendMessage 是同步发送消息,会等待消息返回,如果消息不返回就一直不响应。
LZ可以试试换成PostMessage(这个发消息,不管返回,同时的优先级发送消息),或者使用SendMessageTimeout(依然是同步发送,但是只等待指定超时时间),然后把TimeOut设置很小就可以了。