-3

プロセスを起動している間、テキスト ボックスを制御できません。

私の質問は、プロセスの起動中にテキストボックスを変更するにはどうすればよいですか?

プロセスが起動される前にテキストボックスを変更しようとしても、まだ機能しません。

このフォーラムでいくつかの回答を見つけましたが、説明は私の問題に実装するのが少し難しいです。

バッチ ファイルを実行してバックアップを作成する小さなプログラムを作成しました。バックアップの実行中は、テキストボックスを変更したり、ボタンを無効にしたりすることはできません。

これが正常であることはすでに確認しましたが、ソリューションを実装する方法がわかりません。Dispatcher.invoke以下に示すように、私の最後の試みはでした。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        tb_Status.Text = "Ready";

    }

    public void status()
    {
       Dispatcher.Invoke(DispatcherPriority.Send, new Action( () => { tb_Status.Text = "The backup is running!"; } ) );

    }

    public void process()
    {
        try
        {            
            Process p = new Process();
            p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = "Robocopy.bat";
            p.Start();

            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            tb_Output.Text = File.ReadAllText("Backup\\log.txt");
        }
        catch (Exception ex)
        {
            tb_Status.Text = ex.Message.ToString();
        }
    }

    private void Bt_Start_Click(object sender, EventArgs e)
    {
        status();
        Directory.CreateDirectory("Backup");

        process();
        tb_Status.Text = "The backup finished";
        File.Delete("Backup\\log.txt");

    }


}
4

1 に答える 1

0

status() メソッドの本体を次のように置き換えると:

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Send, new Action(() => { tb_Status.Text = "The backup is running!"; }));
Application.DoEvents();

それは正しく動作します。

于 2012-10-22T14:52:10.150 に答える