Excel interop COM exception lors de l'exécution en arrière-plan

Je suis en train de faire appliquer des styles de cellules dans mon classeur. Et je veux le faire dans le thread d'arrière-plan, donc mon interface graphique peut rester sensible. Ce travail devrait prendre que quelques secondes, et si je clique sur certains aléatoire de cellules dans mon document, je vais devenir une exception. Voici mon code:

public void ApplyStyles()
{
    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += DoWork;
    bw.RunWorkerAsync();

}

private void DoWork(object sender, DoWorkEventArgs e)
{
    try
    {
        foreach (ICell xcell in cells)
        {
            Microsoft.Office.Interop.Excel.Range cell = cellUtility.GetCell(xcell);
            if (styles.ContainsKey(styleIds[xcell.Style]))
            {
                Style s = styles[xcell.Style];
                cell.Style = s;
            }
        }
    }
    catch (Exception ex)
    {
        if (Logger.IsErrorEnabled)
        {
            Logger.Error(ex.ToString());
        }
        messageBox.ShowErrorMessage(localizationMessages.ApplyingErrorText, localizationMessages.ApplyingErrorCaption);
    }
}

Lorsqu'une exception se produit, c'est le message que je reçois;

System.Runtime.InteropServices.COMException (0x800AC472): Exception from HRESULT: 0x800AC472
   at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
   at Microsoft.Office.Interop.Excel.Range.set_Style(Object value)
   at ABZ.ReportFactory.OfficeAddin.Excel.BatchLinking.BackgroundStyleApplier.DoWork() in C:\ABZ\ABZ ReportFactory Office Addin\ABZ.ReportFactory.OfficeAddin.Excel\BatchLinking\BackgroundStyleApplier.cs:line 86

Est-il possible de faire ce style de l'application de l'opération dans le thread d'arrière-plan? Et comment dois je faire?

Deuxième problème que j'ai est que, bien que ce style d'application est en cours d'exécution en arrière-plan de mon curseur est en constante évolution de l'état de l'agitation régulière jusqu'à ce que cette opération est terminée. Je voudrais curseur à la normale. L'utilisateur est totalement ignorant de cette opération en arrière-plan.

cheers,
Vladimir

InformationsquelleAutor Vajda | 2012-03-01