2011-04-20 6 views
0

긴 텍스트에 대한 다양한 통계를 얻기 위해 Word 추가 기능 (Word 2007, VS 2008)을 만들려고합니다. 통계 계산 기능은 별도의 클래스에 있으며 복잡하지는 않지만 시간이 많이 걸립니다. 계산은 내 추가 기능의 사용자 지정 작업 창 단추에서 시작하고 완료되면 동일한 CTP의 DataGridView 컨트롤에 표시됩니다. 이것은 계산이 수행되는 동안 Word가 차단된다는 것을 제외하면 잘 작동합니다. 긴 텍스트의 경우 시간이 걸릴 수 있습니다 (예 : 문서 800 개에 대해 ~ 10 초). 이 문제에 대한 몇 가지 이전 스레드를 읽고 BackgroundWorker를 사용하려고 시도했지만 도움이되지 않았습니다. Word는 stil 차단되었습니다. 여기에 내 현재 코드 :Word 2007 추가 기능 비동기 작업

 private void btnAnalyze_Click(object sender, EventArgs e) 
    { 
     worker.RunWorkerAsync(); 
    } 

    private void worker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     e.Result = Tools.CalculateStatistics(
      Globals.ThisAddIn.Application.ActiveDocument.Content.Text, 
      statOptions); 
    } 

    private void worker_RunWorkerCompleted(
     object sender, RunWorkerCompletedEventArgs e) 
    { 
     gridResults.BeginInvoke(
      new GridDelegate(RefreshGrid), 
      e.Result as List<Tools.StatResults>); 
    } 

    private void RefreshGrid(List<Tools.StatResults> list) 
    { 
     statList = list; 
     gridResults.DataSource = statList; 
     gridResults.Refresh(); 
    } 

작업자가 BackgroundWorker 구성 객체이며, gridResults는 DataGridView 컨트롤은, statList는 DataGridView에 대한 데이터 소스 일반적인 목록입니다. (내 추가 기능 usercontrol의 개인 회원입니다)

답변

0

아직 Word에서 스레드를 사용하여 시도하지 않았습니다. 내가 Outlook과 관련하여 읽은 마지막 기사는, 스레드에 관한 Ken Slovak의 코멘트를 Outlook 2010 64 bit Add-in- Crashing creating another thread으로 볼 가치가 있다고 생각합니다.

+0

답변 해 주셔서 감사합니다. –

관련 문제