2014-07-25 2 views
0

추출 유틸리티가 .cab입니다. 내 메인 윈도우에서 .cab의 이름을 추출하고 현재 추출중인 파일과 추출 완료율을 보여주고 싶습니다.백그라운드 프로세스가 완료 될 때까지 UI가 멈춤.

각 필드에 대해 file name, percentage 등의 등록 정보가 있습니다. 내 ViewModel에 있습니다.

모두 잘 작동 있지만

MainVindowViewModel UI

에 반영되지 않습니다 각각 추출 파일 전후에 두 개의 이벤트 위의 추출

private void ExtractCab(string outputDirectory) 
{ 
    m_CabinetFile.FileExtractBefore += new EventHandler(CabinetFile_FileExtractBefore); 
    m_CabinetFile.FileExtractComplete += new EventHandler(CabinetFile_FileExtractComplete); 
} 

에 대한

public string FileExtract 
    { 
     get 
     { 
      return _fileExtract; 
     } 
     set 
     { 
      _fileExtract = value; 
      NotifyPropertyChanged("FileExtract"); 
     } 
    } 

    public int Percent 
    { 
     get 
     { 
      return _percent; 
     } 
     set 
     { 
      _percent = value; 
      NotifyPropertyChanged("Percent"); 
     } 
    }  

방법은 트리거합니다.

내가 택시를 추출하기 때 내가 필요한 모든 정보를 얻을 다음과 같은 방법으로

있지만 업데이트지고있는 XAML UI에 바인딩

private void CabinetFile_FileExtractBefore(object sender, System.EventArgs e) 
    { 
     TFile file = (TFile)sender; 

     FileExtract = file.FullName;      
    } 

    private void CabinetFile_FileExtractComplete(object sender, System.EventArgs e) 
    { 
     Count++; 
     Percent = Convert.ToInt32(((decimal)Count/(decimal)m_CabinetFile.FileCount) * 100); 
    } 

FileExtractPercent 속성 UI

에 반영되지 않습니다 코드에는 있지만 UI에는 없습니다. UI가 완성 된 택시가 추출 될 때까지 붙어 있습니다.

+0

내 조언은'async \ await' 기능이나'BackgroundWorker' 컨트롤을 살펴 보는 것입니다. 'BackGroundWorker'는 이해하기 쉽지만, 제 생각에'async \ await'는 요즘 어떻게 작동하는지 이해하면 더 나은 해결책이 될 것입니다. – AndreySarafanov

+0

@Sheridan 저는 이것이 버그 요청이며 '게시 방법'이 아니라고 생각합니다. –

+0

@LIUFA, 이것은 질문 및 답변 사이트이며 버그를 요청하거나보고 사이트는 아닙니다. 질문 작성자는 'BackgroundWorker'에 문제가있어 문제를 해결할 수 있습니다. – Sheridan

답변

1

WPF에서 집중적 인 계산을 수행하려면 항상 BackgroundWorker을 사용하십시오. 주 스레드는 UI 렌더링을 담당하며 추출 작업이 많으면 다른 요청에 응답 할 수 없습니다.

BackgroudWorker 클래스는 UI의 사용자에게 알리기 위해 사용할 수있는 현재 진행률을보고하는 콜백도 제공합니다.

관련 문제