- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我一直在与这个问题作斗争,并尝试了很多不同的方法来解决它,但都无法解决。
基本上,我的应用所做的就是调用 java 文件以在设备上加载应用。在加载时将其打印到富文本框,然后我想转到下一个文件。我遇到的问题是,在加载第一个文件时,第二个文件尝试加载哪些案例有问题。我已尝试等待退出,但如果我这样做,则输出数据不会写入富文本框。有什么想法吗?
private void btnLoad_Click(object sender, EventArgs e)
{
rchsdtOut.Clear();
//count the items in queue.
var count = lstBarToLoad.Items.Count;
if (count <= 0)
{
MessageBox.Show("Nothing added to the load queue");
}
else
{
String toLoad;
for (int i=0; i < count;i++)
{//START OF FOREACH
toLoad = lstBarToLoad.Items[i].Text;
//call load method.
loaddPB(toLoad);
}//end of for.
}//end of else.
}//end of private
我试过在许多不同的地方等待退出,但它似乎不起作用。
//Method to load files on device.
private void loaddPB(string toLoad)
{
process1 = new System.Diagnostics.Process();
process1.StartInfo.UseShellExecute = false;
process1.StartInfo.RedirectStandardOutput = true;
process1.StartInfo.RedirectStandardError = true;
process1.StartInfo.CreateNoWindow = true;
process1.StartInfo.FileName = "java.exe ";
process1.StartInfo.Arguments = "-Xmx512M -jar";
process1.StartInfo.Arguments += toLoad;
try
{
process1.Start();
process1.OutputDataReceived += (s, a) => myMethod(a);
process1.BeginOutputReadLine();
process1.ErrorDataReceived += (s, a) => myErrorMethod(a);
process1.BeginErrorReadLine();
process1.WaitForExit();
}
catch
{
Console.WriteLine("error");
}
}
以下两种方法将标准输出或错误写入富文本字段。
//Method to do the logging.
private void myMethod(DataReceivedEventArgs e)
{
if (e.Data != null)
{
Action action = () => rchsdtOut.Text += "\r\n" + e.Data.ToString();
rchsdtOut.BeginInvoke(action, null);
Console.WriteLine(e.Data.ToString());
}
}//end of private
//Method to load the error if any thrown.
private void myErrorMethod(DataReceivedEventArgs e)
{
if (e.Data != null)
{
Action action = () => rchsdtOut.Text += "\r\n" + e.Data.ToString();
rchsdtOut.BeginInvoke(action, null);
Console.WriteLine(e.Data.ToString());
}
}//end of private
任何想法都会很棒。 Bascally 我需要进程退出,然后我可以继续认为 forloop 加载下一个文件。
最佳答案
如果您使用 WaitForExit,您的应用程序将阻塞(等待)直到进程退出。这意味着它无法在其 UI 线程中处理任何 Windows 消息,因此它不会更新 UI。
您需要“在后台”启动该过程,以便您的 UI 继续刷新。这可以通过以下方式完成:
进入繁忙的等待循环,直到它完成,然后处理应用程序事件。 (当心这一点,因为任何导致重入调用此代码的事件都可能造成非常糟糕的后果。通常,如果您使用这种方法,您需要确保应用程序的其余部分在它知道的状态下“锁定”正忙于等待进程完成)。这实际上是 WaitForExit 所做的,但它也处理应用程序事件,允许 UI 保持模糊响应:
while (!process.HasExited)
{
Application.DoEvents();
Thread.Sleep(100);
}
关于c# - WaitforExit 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213569/
我正在编写一个应用程序,其中有两个对外部程序的调用,RichCopy 和 7zip。这个想法是使用 RichCopy 移动文件,并在 RichCopy 完成后使用 7zip 存档和加密文件。我遇到的问
我正在调用 ffmpeg。有时调用失败并且 ffmpeg 不会退出它只会进入递归循环。我调用了 WaitForExit 方法。 在代码中,我进一步询问了 standardOutput 和 standa
我在我的应用程序中使用以下语句: System.Diagnostics.Process process = new System.Diagnostics.Process(); process.Star
所以我一直在与这个问题作斗争,并尝试了很多不同的方法来解决它,但都无法解决。 基本上,我的应用所做的就是调用 java 文件以在设备上加载应用。在加载时将其打印到富文本框,然后我想转到下一个文件。我遇
我正在尝试统一运行一个 exe 应用程序以执行某些功能,并且该 exe 文件将在统一运行时从我的麦克风获取输入,所以我必须等到它退出,而使用 waitforexit 可以很好地允许 exe 获取输入但
我正在使用 WMI to start a process on a remote machine .创建进程的调用立即返回,我还获得了远程机器上进程的 ID。 我想等待远程进程完成。一种选择是轮询远程
我下面的代码从while循环中被调用,因此它连续执行多次。有时但并非总是如此,我最终在p.WaitforExit()上遇到线程被中止的错误。有人对此有见识吗?我应该在p.WaitForExit之后调用
我有一个启动进程、等待退出然后返回退出代码的函数: function int login(string pathtofile) { //... Process process = ne
我已经创建了 Print spooler 应用程序来异步打印 pdf。 (应用程序使用veryPDF命令从网络打印机打印) 这是代码 var procStartInfo = new System
我正在将自定义操作添加到我的 VS2008 安装项目(MSI 安装程序)中。 我正在调用一个批处理文件来创建数据库,然后想删除这些文件。我有 WaitForExit() 但它不会等待。为什么?
下面是我启动该过程的代码,只放了演示链接。我希望这个过程在不打开浏览器的情况下在后台运行。第二行也抛出异常 Object reference not set to an instance of an
来自 MSDN 使用新创建进程的 stdoutput 的例子: // This is the code for the base process Process myProcess =
我的程序一直运行良好,但突然卡在 Process.WaitForExit();而不继续执行下一个命令。我已经多次运行该程序而没有出现错误。有谁知道我该如何调试这个或者有谁知道背后的问题是什么?会不会是
此代码在大量机器上按预期运行。然而在一台特定的机器上,调用 WaitForExit()似乎被忽略,实际上将进程标记为已退出。 static void Main(string[] args) {
我有一项服务有时会调用批处理文件。批处理文件需要 5-10 秒来执行: System.Diagnostics.Process proc = new System.Diagnostics.Process
我想等待一个进程完成,但是 Process.WaitForExit() 挂起了我的 GUI。是否有基于事件的方式,或者我是否需要生成一个线程来阻塞直到退出,然后自己委托(delegate)事件? 最佳
我正在尝试执行一个批处理脚本,该脚本在末尾包含一个我想确认的暂停语句: var psi = new ProcessStartInfo(path, arguments); psi.RedirectSta
我正在调用一个“有时”在 VB.NET 中运行的第三部分应用程序(它是一个自托管的 WCF)。但有时第 3 方应用程序会永远挂起,所以我给它添加了一个 90 秒的计时器。问题是,我怎么知道事情是否超时
我正在使用以下提供的解决方案:https://stackoverflow.com/a/19104345/2713516要异步运行 WaitForExit,但是,我想使用 Int32 参数重载 ( ht
我对 c# 和这个论坛总体上还很陌生,但就我而言,我还没有看到任何像我这样的问题可以解决我的问题。 我正在调用方法 Process.WaitForExit() 以等待安装文件完成安装。但是,该方法似乎
我是一名优秀的程序员,十分优秀!