2010-07-08 9 views
0

나는이 질문의 성향에 대해 미리 사과하지만 어디서부터 시작해야할지 모르겠습니다.Siverlight에서 BackgroundWorker 문제가 발생했습니다.

Silverlight에서 Excel 파일을 열려고 시도하고 해당 Excel 파일에서 일부 처리를 수행 할 때 문제가 발생하지만 주 스레드에서이 작업을 수행 할 때 두 가지 주요 문제점이 있습니다.

  1. 는 엑셀 UI 스레드 종료 (메시지 박스 내 경우를 열 때) 할 때 나는
asynccompleted 콜백은 무슨 일이 일어나고 있음을 발견 한 UI가 여러 비동기 호출에
  • 을 정지 파일을 여는 동안

    그래서 처리 작업을 수행 할 백그라운드 작업자를 작성하려고하는데 괜찮은 예제를 찾을 수 없습니다 (모두 매우 단순합니다). backgroundworker 패턴에 대한 자원이 있습니까? 나는 다음과 같은 문제

    난 단지 내 BackgroundWorker에 대한 변수가 나는 별도의 BackgroundWorker 구성 클래스가 있어야 싶다면 클래스 수준에서 변수 (액세스 할 수 없습니다
    1. 해낸 하나를 작성하는 노력

      ?)으로 메시지를 표시하고, 지나치게이 평균 내가 약간의 배경 노동자를 많이해야 않습니다 (복잡?)

    2. 방법을 표시하는 방법이 관련 중반 배경 스레드를 일시 중지

    3. 오류 메시지.

  • +0

    BGW로 문제를 해결할 수 없습니다. Excel은 단일 스레드이며 작업은 여전히 ​​UI 스레드에서 수행됩니다. –

    +0

    owch! 어떤 경우, 필자는 완성 된 콜백 중 일부가 결국에만 발동되는 이유를 통해 시도하고 작업 할 것입니다. –

    +0

    예, 방금 실험을했는데 백그라운드 스레드에서 Excel 문서를 열 수 없으므로이 것을 잊어 버려야합니다. –

    답변

    2

    # 3과 관련하여 BackgroundWorker 스레드에서 직접 UI를 수행 할 수 없습니다. 필요한 것은 이벤트 인수에 필요한 모든 정보가 포함 된 이벤트를 발생시키고 해당 이벤트를 UI 스레드에서 처리하는 것입니다.

    public event EventHandler<MessageBoxEventArgs> Message_Event; 
    
    ... 
    
    
         if (this.Message_Event!= null) 
         { 
          this.Message_Event(this, new MessageBoxEventArgs(message)); 
         } 
    

    이 그 다음을 처리하기 : 이벤트 인수

    public class MessageBoxEventArgs : EventArgs 
    { 
        public MessageBoxEventArgs(string message) 
        { 
         this.Message = message; 
        } 
    
        public string Message 
        { 
         get; private set; 
        } 
    } 
    

    화재 발생시 메시지와 함께 당신은 해고 것 메시지 상자 관련 이벤트에 따라서

    private void MessageEventHandler(object sender, MessageBoxEventArgs e) 
        { 
         if (this.InvokeRequired) 
         { 
          this.Invoke((MethodInvoker)delegate { MessageBox.Show(e.Message); }); 
         } 
         else 
         { 
          MessageBox.Show(e.Message); 
         } 
        } 
    
    관련 문제