2012-10-03 41 views
-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"); 

    } 


} 
+3

使用[BackGround Worker]進行研究(http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.aspx) –

+0

1.標籤不屬於標題。 2.你沒有提出問題,也沒有以任何方式描述問題。 3.如果你有跨線程問題,請閱讀[this](http://stackoverflow.com/questions/11923865/how-to-deal-with-cross-thread-access-exceptions)。 –

+0

H.B.,我試過你的調度程序測試代碼,但是這個代碼在執行BAT文件時不會運行。 – Bo0m3r

回答

0

當我代替你的地位()方法體:

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

它工作正常。