だから私はしばらくの間この問題と戦ってきて、それを修正するために多くの異なる方法を試しましたが、できません。
基本的に、私のアプリが行うのは、Javaファイルを呼び出してデバイスにアプリケーションをロードすることです。ロードしている間、リッチテキストボックスに印刷します。次に、次のファイルに移動します。私が抱えている問題は、最初のファイルがロードされている間に、2番目のファイルがロードを試みて問題が発生することです。終了待ちを試しましたが、そうすると、出力データがリッチテキストボックスに書き込まれません。何か案は?
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");
}
}
以下の2つの方法は、stdoutまたはエラーをリッチテキストフィールドに書き込みます。
//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
どんなアイデアでも素晴らしいでしょう。基本的に、プロセスを終了する必要があるので、forloopを考え続けて次のファイルをロードできます。