2014-09-29 2 views
0

두 개의 다른 위치에서 호출 할 수있는 메소드가 있습니다 (loc A 및 loc B라고 함). 그 방법에서는 특정 bool이 참일 때 실행되는 while 루프가 있습니다 (running).값 유형 필드에 대한 참조 만들기

까다로운 것은 loc A에서 메서드를 호출하면 해당 bool 변수가 bool-X를 참조해야한다는 것입니다. loc B에서 호출 된 경우 bool은 bool-Z를 참조해야합니다. X와 Z는 다른 클래스에서 정의되며 전 세계적으로 사용 가능합니다.

running은 고정되어 있으며 프로그램의 다른 부분이 A 또는 B를 변경하면 running이 영향을받지 않으므로 running = locIsA ? GetBoolA : GetBoolB;으로 설정하면 작동하지 않습니다.

콘텐츠를 복사하는 대신 조건에 따라 running을 bool-A 또는 bool-B로 설정하려면 어떻게해야합니까?

감사합니다.

답변

2

한 가지 방법은 Func<bool> amIDoneYet 매개 변수를 메서드에 전달하는 것입니다.이 매개 변수는 메서드를 종료해야하는지 여부를 주기적으로 쿼리하는 데 사용할 수 있습니다. 그런 다음 메서드에 전달하기 위해 () => X과 같은 대리자를 만듭니다.

그러나 디자인을 변경하면 개선 될 수 있는지 여부를 고려해 볼 수 있습니다. 예를 들어, 이것을 취소에 사용하는 경우 Task cooperative cancellation pattern을 구현하는 것이 좋습니다. 이는 비동기 작업 취소를 구현하는 데 권장되는 표준 방법입니다.

+0

감사합니다. 메서드는 Property입니다. 나는 그저 값을 얻으 려니 까? – Anders

+0

나는 아마도 작업을 사용하여 내 프로그램을 변환 할거야, 지금은 많은 bools과 Thread.Sleep의 무엇입니까 .. – Anders

+0

@Anders, 람다 구문을 사용하여 주셔서 감사합니다'() = > X', 당신은 기본적으로 속성 값을'Func '으로 전달할 수있는 메소드 호출로 변환합니다. 이 말은 : 당신이이 함수를 실행할 때마다 X 값을 가져옵니다. –

관련 문제