Excel 용 VSTO 추가 기능을 개발 중입니다. 백그라운드 작업자 스레드를 사용하여 백그라운드에서 코드 일부를 실행하여 사용자가 엑셀 시트에서 자유롭게 작업 할 수 있도록했습니다. 코드에서와 같이 시트 이벤트 (셀 변경, 선택 변경) 배경 스레드를 실행 한 후 발사하지 않는 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);
}
}`
, 이러한 이벤트는 다음과 같이 트리거 얻고있다 예상했다. 그러나 백그라운드 작업자 스레드를 실행 한 후에는 어떻게 든 이러한 이벤트가 트리거되지 않습니다.
이 문제를 해결하려면 Workbook_SheetActivate을 다시 실행해야합니다. 배경 작업자 스레드를 실행 한 후에는 매번이 작업을 수행해야합니다. 내 백그라운드 작업자의 코드 조각은 이미 워크 시트에있는 데이터를 분석하고 일부 내용을 변경 한 다음 시트의 데이터를 업데이트합니다.
Excel에서 COM (구성 요소 개체 모델) 및 STA (단일 스레드 아파트)를 사용하여 스레드를 실행하는 것으로 알고 있습니다. 즉 한 번에 하나의 스레드 만 아파트에서 실행할 수 있습니다. 이것이 문제의 원인인지 확실하지 않습니다.
누군가 이런 일이 일어나는 이유를 설명해 주시겠습니까? 문제를 해결할 수있는 가능한 해결책은 무엇입니까? 나는 현재 마이크로 소프트 비주얼 스튜디오 2010 및 Microsoft Excel 사전에 2007
감사에서 일하고 있어요
!
안녕하세요, Dgorti, Thanx 입력 용입니다. 사실 나는 던져 예외를 처리하기 위해 IMessage 인터페이스를 구현했습니다. 작업 배경 스레드에서 주 스레드를 호출하는 방법을 설명하는 링크를 통해 나를 도울 수 있습니까? 지금은 GUI의 버튼을 통해 위의 sheetactivate 함수를 호출하고 있습니다. 백그라운드 스레드에서이 함수를 호출하고 그렇게하는 동안 주 스레드를 호출하는 방법이 있습니까 ?? –
또한이 문제가 발생하는 이유는 어디에서도 그럴듯한 설명을 찾을 수 없습니다. 이 문제의 이유를 이해하도록 도와 주시겠습니까? –