2009-11-09 2 views
2

Excel 용 사용자 정의 함수를 구현하는 C#에서 추가 기능을 만들었습니다. 이 UDF는 즉시 반환되지만 백그라운드 비동기 절차를 제어합니다.C#의 백그라운드 스레드에서 Excel 2003의 확인란을 업데이트하는 데 때때로 오류가 발생합니다.

이 절차의 상태를 모니터링하고 Excel에 표시해야합니다. 확인란을 사용하여 상태를 표시하도록 선택했습니다.

백그라운드 스레드가 특정 백그라운드 절차에 연결된 확인란을 업데이트합니다.

Excel 모델에 대한 호출을 try/catch 블록으로 래핑하고 준비가 완료되지 않은 Excel에서 예외가 발생하는 경우 지연 후 호출을 다시 시도합니다. 이 메커니즘은 올바르게 작동합니다.

문제는 때로는 확인란을 수정하는 코드가 성공적으로 실행 되더라도 확인란 자체가 Excel에서 수정되지 않는 것입니다.

내가 체크 박스에 전성 검사를 수행 한

내가 변화하고 그들이 로그에 변경되지 않았 볼 수 속성 :

   checkBox.Value = false; 
       checkBox.Interior.Color = 0x00DDDDDD; // light grey in AABBGGRR format 
       checkBox.Caption = "Off"; 

       // this sometimes prints the values the checkbox had before the above line 
       LogDebug("Color: " + checkBox.Interior.Color + " Value:" + checkBox.Value + " caption:" + checkBox.Caption); 

이 내용은 Excel 2007의 문제로 엑셀 2003에서 발생 결코 생기지 않는다.

행운을 빌어 COM 아파트 스레드 특성을 수정하는 Application.ScreenUpdating, Application.Interactive로 심판을 보려고했습니다. 다른 곳에서는 확인란 속성을 변경하지 않기 때문에 동시성 문제가 아닙니다.

아무도 비슷한 경험을했기 때문에?

감사합니다.

답변

0

글쎄, 나는 왜 아직도 이런 일이 벌어지고 있는지 이해할 수는 없지만 지금은 괜찮은 빠른 수정을 해킹하고있다.

지금 설정 값을 설정 한 후에 설정 값이 올바르지 않으면 예외로 처리하고 요청을 백그라운드 스레드에 넣어 나중에 시도하십시오.

코드는 체크 박스를 업데이트 할 때까지 반복됩니다.

좋아하지 마세요. 그러나 올바른 동작을 제공합니다.

관련 문제