Я пытаюсь применить некоторые стили к ячейкам в моей книге. И я хочу сделать это в фоновом режиме, чтобы мой графический интерфейс оставался отзывчивым. Эта работа должна занять несколько секунд, и если я нажму на какую-нибудь случайную ячейку в моем документе, я получу исключение. Вот мой код:
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);
}
}
Когда происходит исключение, это сообщение, которое я получаю;
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
Можно ли применить этот стиль, применяя операцию в фоновом потоке? И как мне это сделать?
Вторая проблема, с которой я столкнулся, заключается в том, что, пока применение этого стиля выполняется в фоновом режиме, мой курсор постоянно меняет состояние с занятого на обычное, пока эта операция не закончится. Я хотел бы, чтобы курсор был нормальным. Этот пользователь совершенно не знает об этой фоновой операции.
веселит,
Владимир