2012-04-14 3 views
1

나는 소켓을 사용하여 문자열을 읽는 winforms 응용 프로그램을 가지고 있으며 소켓은 backgroundWorker 스레드 아래 있습니다.Invoke in C# 4.0 service class

모든 것이 정상적으로 작동하지만 새 회사 표준에 따라 관리자는이 winforms 응용 프로그램을 시작 폴더에 항상 넣는 대신 서비스로 실행하려고합니다.

문제는 우리가이 코드의 라인 아래에 사용되는 응용 프로그램

윈폼입니다
Invoke(new MethodInvoker(
        delegate { _logger.Error((String.Format("Error: {0}", _socketError))); } 
       )); 

누군가가 내가

제안하십시오 windowserverice 프로젝트에 위의 코드 줄을 사용하기 위해 할 ca를지도하는 수

감사

업데이트 : 나는 t 때문에 호출 사용할 필요가 그의 진술은 backgroundWorker 구성 요소의 DoWork 이벤트에서 실행 중입니다.

+0

어떤 종류의 winform 컨트롤에 _logger.Error가 기록됩니까? – Tung

+0

아니요, 로그 파일에 로깅 중입니다. 이건 NBlog입니다. – Shax

답변

3

_logger은 로그 파일에 쓰는 중이므로 처음에는 Invoke을 사용하는 원래의 의도를 이해하지 못합니다. 나는 그 라인을 다음으로 대체하는 것이 안전하다고 생각한다 :

_logger.Error(String.Format("Error: {0}", _socketError)); 
+0

Tung, 친절하게도 내 게시물의 업데이트 된 설명을 참조하십시오. – Shax

+0

UI 컨트롤의 크로스 스레드 업데이트를 수행하지 않는 한 'Invoke'는 필요하지 않습니다. ** UI 요소를 업데이트하지 않고 ** 파일을 쓰는 것만으로 ** 윈도우 서비스를 만들고 있기 때문에 호출을하지 않으면'Invoke' – Tung

+0

내에서 호출을 래핑 할 필요가 없습니다. backgroundworker 프로세스 아래에 있기 때문에 크로스 스레드 오류가 발생합니다. – Shax