2010-01-20 4 views
2

WPF 응용 프로그램에서 특정 메서드를 호출하여 작업을 업데이트하는 시각적 컨트롤과 주기적으로 일부 데이터베이스 쿼리 작업 (LINQ to SQL)을 수행하는 타이머가 있습니다.C# 타이머 기반 및 UI 이벤트 기반 호출에서 하나의 메서드 사용

가끔씩 UI 이벤트 (예 : 버튼 클릭)에서이 메소드를 호출해야 할 때도 있습니다.

같은 방식의 타이머 기반 호출과 UI 이벤트 기반 호출이 동시에 발생하는 경우 위험 할 수 있습니까? 또는 .NET 프레임 워크가 이런 위험으로부터 나를 보호합니까?

이와 같은 방식으로 한 가지 방법을 사용하고 있습니까?

답변

1

글쎄,이 방법은 정확히 무엇을합니까? UI를 업데이트하는 경우 해당 부분에 대해 UI 스레드 (Dispatcher 사용)로 마샬링해야합니다.

이 메서드는 공유 상태를 만듭니 까? 그렇다면 다시주의해야합니다.

기본적으로 두 스레드에서 동시에 호출되는 단일 메소드에 대해 본질적으로 안전하지 않은 것은 없지만 해당 메소드 내에서 안전하지 않은 작업 (동시성 측면에서)을 자동으로 방지 할 수있는 방법은 없습니다.

+0

감사합니다. DispatcherTimer 및 dispatcherTimer.Tick 이벤트 핸들러를 사용하면이 "dispatcherTimer.Tick 이벤트 핸들러"에서 수행 한 모든 작업이 다른 (새로운) 스레드에서 수행된다는 의미입니까? – rem

+0

그렇지 않습니다. UI 스레드가 유휴 상태 일 때만 타이머를 틱 할 수 있습니다. 잠금이 필요하지 않습니다. –

0

timer 및 click 이벤트가 다른 스레드에서 실행 중이므로 동시에 메서드를 실행할 수 있습니다. 메서드 내에서 중요한 섹션 주위에 synclock을 배치하는 것이 좋습니다. 즉 코드가 값 등을 계산하는 경우

+0

"just in case"방식으로 잠금 장치를 도입해서는 안됩니다. 값을 계산하는 것은 공유 상태에 영향을주지 않으면 절대적으로 좋습니다. –

관련 문제