2014-07-18 2 views
0

내 응용 프로그램에서 백그라운드 작업자를 사용하고 있습니다. 보고서를 생성 할 때까지 배경 작업자에게 아무런 문제가 없습니다. 문서를 저장하려면 devexpress 보고서를 생성 한 후 다음 오류가 발생합니다.백그라운드 작업자 스레드 예외

는 "현재 스레드가 단일 스레드 아파트로 설정해야합니다 (STA)는 OLE 전에 모드 는 required.Please 당신이 [STAThreadAttribute] 주요 기능에서이 있는지 확인합니다."

ddl의/obj /를 지우려고했지만 작동하지 않습니다.

내 주요 코드는입니다 :

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new FrmUxLogin());    
    } 

내 backgrounfworker 코드는 (그것은 아닙니다의 WinForm,이 클래스는) :

public bool GoalReport(string val, string goalid) 
    {    
     try 
     { 
      worker.WorkerReportsProgress = true; 
      worker.DoWork += (obj, args) => 
      { 
       //Performing calculations and generating report 
      }; 
      worker.ProgressChanged += (obj, args) => 
       { 
        MDIMain objMain = Application.OpenForms["MDIMain"] as MDIMain;      
       }; 
      worker.RunWorkerAsync(); 
     } 
     catch(Exception) 
     { 
     } 
    } 
**My code for report generation is** 
private void CreateSummaryGoalReportTables(DataTable dtcurrent, DataTable dtportfolio, DataTable achieveTargetPropbabilty) 
    {// after clicking export on devexpress the exception occured here 
    }<==ThreadStateException 

보고서는 생성지고 하지만 보고서를 내보낼 수 없습니다. devexpress는 내장 함수를 사용하여 보고서를 저장합니다. 보고서 내보내기 용으로 코딩하지 않았습니다. 도와주세요! 미리 감사드립니다.

+0

을하고 그것을 오류를 저장하는 동안 발생합니다. – Jack

답변

1

STA 모드로 백그라운드 작업자를 설정할 방법이 없습니다. ui 스레드에서 저장 작업을 호출해야합니다. onComplete 처리기를 추가하고 save를 호출하십시오.

이 문서가 제대로 완료 핸들러를 작성하는 방법을 보여줍니다 내가 완전히 보고서를 생성 한 후 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.runworkercompleted.aspx

+0

+1. "단일 스레드 아파트"는 여러 개의 스레드를 거기에 맞출 수 없다는 암시를 주어야합니다 ... –

+0

하지만 devexpress를 사용하여 절약하려면 어떻게 할 수 있습니까? – Jack

+0

전체 코드를 표시하십시오. – gabba

관련 문제