2012-10-03 2 views
-3

프로세스를 시작하는 동안 텍스트 상자를 제어 할 수 없습니다.텍스트 상자를 제어 할 수 없습니다.

내 질문은 : 어떻게 프로세스를 시작하는 동안 텍스트 상자를 수정할 수 있습니까?

프로세스가 시작되기 전에 텍스트 상자를 수정하려고해도 여전히 작동하지 않습니다.

이 포럼에 대한 답변을 찾았지만 문제는 내 문제에 대해 구현하기가 어렵습니다.

백업을 만들기 위해 배치 파일을 실행할 작은 프로그램을 만들었습니다. 백업이 실행되는 동안 텍스트 상자를 수정하고 단추를 비활성화 할 수 없습니다.

나는 정상적으로 보았지만 솔루션을 구현하는 방법을 모르겠습니다. 내 마지막 시도는 아래와 같이 Dispatcher.invoke입니다.

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

제대로 작동 :

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/en-us/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

나는 당신의 상태() 메소드의 본문을 대체합니다.

관련 문제