Я пытаюсь создать надстройку Word (Word 2007, VS 2008) для получения различной статистики для длинных текстов. Функции для вычисления статистики находятся в отдельном классе и не сложны, но занимают много времени. Расчеты начинаются с кнопки настраиваемой панели задач в моей надстройке и представляются в элементе управления DataGridView в том же CTP-файле после завершения. Это работает хорошо, за исключением того, что Word блокируется во время выполнения расчетов. Для длинных текстов это может занять время (например, ~ 10 секунд для документа на 800 сотен страниц). Я читал несколько предыдущих тем по этой проблеме и пытался использовать BackgroundWorker, но это не помогло - Word по-прежнему заблокирован. Вот мой текущий код:
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)