0
私はXamarinのAndroidアプリケーションを作成していますが、長時間実行しているネイティブ(Java)プロセスがあります。私はプロセス(stdout、stderr)の出力をキャプチャし、進行状況をUIを更新したいと思います。以下のコードは動作しません。今すぐUIスレッドをブロックします。Xamarin:長時間実行しているネイティブプロセスからUIを更新します。
UIスレッドをブロックせずにUIを更新する正しい方法は何ですか?
string[] myCmd = { "unix_cmd", "--args" };
process = Runtime.GetRuntime().Exec(myCmd);
BufferedReader bufferedStdoutReader = new BufferedReader(new InputStreamReader(process.InputStream));
BufferedReader bufferedStderrReader = new BufferedReader(new InputStreamReader(process.ErrorStream));
logView.Text += "Stdout >>>>>>>>" + System.Environment.NewLine;
var txt="";
txt = bufferedStdoutReader.ReadLine();
while (txt != null)
{
logView.Text += txt + System.Environment.NewLine;
txt = bufferedStdoutReader.ReadLine();
}
logView.Text += "Stdout <<<<<<<<<" + System.Environment.NewLine + System.Environment.NewLine;
logView.Text += "Stderr >>>>>>>>>>" + System.Environment.NewLine;
txt = bufferedStderrReader.ReadLine();
while (txt != null)
{
logView.Text += txt + System.Environment.NewLine;
txt = bufferedStderrReader.ReadLine();
}
logView.Text += "Stderr <<<<<<<<<<" + System.Environment.NewLine;
process.WaitFor();
Better Ac t.RunOnUiThread(()=> /*....*/); – XTL
Activity.RunOnUiThreadはApplicationSynchronizationContext.Post呼び出しを置き換えますか? – Rick
@Rick、はい、置き換えることができます。 –