Я разрабатываю надстройку VSTO для Excel. Я использовал поток рабочего фона, чтобы выполнить часть кода в фоновом режиме, чтобы пользователь мог работать над листом excel.Листовые события (смена ячеек, смена смены) не срабатывание после запуска фонового потока в C# addin for excel
Я зарегистрировал слушателей для изменения клеток и события изменения выбора с помощью обработчика sheet_activate событий в главном коде, как показано в коде: `
private void thisWorkbook_SheetActivate(Object sheet1)
{
try
{
if (sheet1 is Worksheet)
{
Worksheet sheet = sheet1 as Worksheet;
sheet.SelectionChange += eventDel_SelectionChange;
sheet.Change += eventDel_CellsChange;
}
}
catch (Exception e)
{
printException(e);
}
}`
Перед запуском фона рабочего потока, эти события становятся инициируются ожидается. Тем не менее, после запуска фонового рабочего потока, как-то эти события не запускаются.
Я должен выполнить thisWorkbook_SheetActivate еще раз, чтобы решить эту проблему. Я должен делать это каждый раз после запуска рабочего рабочего потока. Часть кода в моем фоновом работнике анализирует данные, уже присутствующие на листе, вносит некоторые изменения, а затем обновляет данные на листе.
Я действительно понимаю, что excel использует COM (Component Object Model) и STA (Single Threaded Apartment) для выполнения потоков, т. Е. В квартире может выполняться только один поток. Я не уверен, что это может вызвать проблемы.
Может кто-нибудь объяснить, почему это происходит? Каковы возможные решения проблемы?
Я в настоящее время работает на Microsoft Visual Studio 2010 и Microsoft Excel 2007.
Спасибо заранее!
Hi Dgorti, Thanx для ввода. Фактически я реализовал интерфейс IMessage для обработки исключений. Не могли бы вы помочь мне с любыми ссылками, объясняющими, как вызвать основной поток из рабочего фонового потока. На данный момент я вызываю функцию sheetallivate выше через кнопку в графическом интерфейсе. Есть ли способ вызвать эту функцию из фонового потока и вызвать основной поток при этом? –
Кроме того, я не могу найти никаких правдоподобных объяснений в отношении того, почему возникает эта проблема. Не могли бы вы помочь мне понять причину этой проблемы? –