【问题标题】:Background worker thread exception后台工作线程异常
【发布时间】:2014-07-18 05:35:14
【问题描述】:

我在我的应用程序中使用后台工作程序。在我生成报告之前,后台工作人员没有问题。生成 devexpress 报告后,如果我想保存文档,则会出现以下错误。

"当前线程必须设置为单线程单元(STA)模式 在需要 OLE 之前。请确保您有 [STAThreadAttribute] 你的主要功能。”

我尝试清除 /obj/ 中的 ddl,但它不起作用。

我的主要代码是

    [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 提供了内置函数来保存报告。 我没有为报告导出编码。 请帮忙!!! 提前致谢

【问题讨论】:

  • 在我完全生成报告并尝试保存报告后发生错误。

标签: c# multithreading winforms devexpress backgroundworker


【解决方案1】:

无法将后台工作程序设置为 STA 模式。您应该从 ui 线程调用保存操作。 尝试添加 onComplete 处理程序并在其中调用 save。

本文展示了如何正确编写完整的处理程序: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.runworkercompleted.aspx

【讨论】:

  • +1。 “单线程公寓”应该足够暗示你不能在那里放置多个线程......
  • 但是要使用 devexpress 保存即时消息,该怎么做呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2011-06-18
相关资源
最近更新 更多