2015-01-16 4 views
0

NotifyIcon으로 WPF 응용 프로그램을 만들었습니다.이 응용 프로그램을 최소화하기 위해 this.Hide()을 사용했지만, 일단 실행되면 최소화 할 수 있었기 때문에 MainWindow_Loaded 메서드에서 this.Hide()을 호출했지만 일단 응용 프로그램을 시작하면 , 창 내용이 모두 어두워집니다. 나는이 문제가 발생 다른 스레드를 사용하여 창을 숨기는 방법은 무엇입니까?

private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
... 
    Thread thread = new Thread(DoWork); 

    thread.Start(); 
    Console.WriteLine("thread start"); 

    while (!thread.IsAlive) ; 

    Thread.Sleep(500); 

    thread.Join(); 
    Console.WriteLine("thread has terminated."); 
... 
} 

public void DoWork() 
{ 
    this.Hide(); 
} 

가 호출 될 때 DoWork(), 그것은 Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on. 내가 무엇을해야했다 ...

는 그럼 난 다른 스레드에서 this.Hide()를 호출 할, 이것은 내 코드와 같은 모습입니다 이걸 피하려면? 감사!

+0

왜 다른 스레드에서에'숨기기()'당신의 창을 하시겠습니까? 이것의 요점은 무엇입니까? – dymanoid

+0

일단 컴퓨터를 시작하면 바로 창을 숨길 필요가 있기 때문에 MainWindow_Loaded에서 Hide()를 호출하지만 창에 어둡게 가득 찬 창을 표시합니다. 이것이 내가이 방법으로 원하는 이유입니다 . – Alanight

+0

멀티 스레드 해결 방법을 고안하기보다는 왜 창문이 검게되는지 알아야합니다. 귀하의 코드에 문제가 있다고 생각합니다. 귀하의 질문은 일반적인 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)입니다. – dymanoid

답변

0

Dispatcher 객체를 사용해야합니다.

Dispatcher.BeginInvoke((Action) (() => 
 
    { 
 
     // your code 
 
    }));

+0

감사! 나는 그것을 지금 사용하려고 노력할 것이다! – Alanight

+0

잘 작동합니다! 지금 나는 계속 갈 수있다. 매우 감사드립니다! – Alanight

관련 문제