2015-02-02 1 views
0

나는 datagridview가있는 windows 양식 응용 프로그램을 가지고 있고 각 행은 자체 스레드와 연결되어 있습니다. 각 스레드는 객체의 다른 메소드를 호출 한 다음 항목, 종료 및 기타 중요한 이벤트를 기록합니다.여러 스레드의 로그를 표시하는 가장 좋은 방법은 무엇입니까?

사용자가 클릭 할 때마다 datagridview 행에 해당하는 로그를 표시하려고합니다. 선택된 행의 메시지가 실행중인 상태 로그로 표시됩니다.

필자는 작업 대리자와 여러 줄 텍스트 상자를 사용했지만 특정 datagridview 행을 기반으로 로그 메시지를 필터링하는 방법을 잘 모르고있었습니다.

구현 방법을 제안 해주세요. 어떤 도움을 주셔서 감사합니다

편집 : 로그는 UI에 텍스트 상자 또는 무언가로 표시되며 이미 수행 한 파일에는 표시되지 않습니다. 그리고 다른 하나는 로그를 지속적으로 업데이트하고 싶습니다.

Edit2 : 이미 행/스레드의 문자열 멤버에 로그가 추가되어 있고 행을 클릭하면 지금까지 저장된 로그 메시지가 표시됩니다. 그러나 스레드에서 문자열은 새 메시지로 지속적으로 업데이트됩니다. 그래서 backgroud 스레드에서 업데이트되는 실행중인 로그 메시지를 표시하는 방법을 찾고 있습니다.

+0

Log4Net을 사용할 수 있습니다. – vikky

답변

0

많은 스레드가 동일한 개체를 사용하는 경우 하나의 위협 만이 해당 시간에 변경되도록 잠금을 설정하는 것이 좋습니다. 로깅을 처리하기 위해

static object obj = new object(); 
      static void WriteInGrid(string message) 
      { 
       lock(obj) 
       { 
        Yourdelegate (message) 
       } 
      } 
+0

텍스트 상자 또는 지속적으로 업데이트되는 것을 사용하여 UI에서 로그를 표시하는 방법을 찾고 있는데, 알아낼 수없는 것은 datagridview 행 (스레드)을 기반으로 표시하는 방법뿐입니다. 이미 로그 파일에 기록합니다. – Questions

+0

아마 lock을 사용하여 객체를 잠그면 스레드는 컨트롤 속성을 변경하기 위해 서로 기다릴 수 있습니다. –

0

는 가장 좋은 방법은 도서관과 같은 log4net 기존 재사용하는 것입니다. 이들은 멀티 스레딩, 보안 및 다른 모든 함정을 잘 처리합니다. 펜더 하나 개 또는 여러 대상 (파일, 데이터베이스, 또는 무엇이든 당신이 원하는)에 로그 레코드를 추가하는 방법은

Log4net 작품.

귀하의 경우에는 사용할 수없는 UI 구성 요소에 로그온하려는 경우 즉시 사용할 수있는 입니다. 그러나 당신 스스로 그것을 쓸 수 있습니다! 이를 달성하기 위해서는 UI 로깅 로직을 처리하고 이에 따라 log4net 구성을 편집하는 새로운 클래스를 만들어야한다고 생각합니다.

This thread 이렇게하는 것이 좋습니다. 그리드에서 로깅을 다루지는 않지만 텍스트 상자에서 로깅을 다루고 있습니다. 기본적으로 UI 로깅입니다! 그것을 향상시켜야합니다!

관련 문제