취소 할 수있는 사건을 처리하는 방법은 무엇입니까?


3

이벤트를 구현하도록 도와주세요. 처리기는이를 취소 할 수 있습니다. 당신이에 대한 변경 사항을 볼 수 있도록,

private void Bar() 
{ 
    var e = new BuildStartEventArgs(); 
    OnBuildStart(e); 
    if (!e.Cancel) { 
     //Do build 
    } 
} 

클래스 .NET에서 참조 의미를 가지고 이런 식으로

private void Bar() 
{ 
    //build started 
    OnBuildStart(new BuildStartEventArgs()); 
    //how to catch cancellation? 
} 

:

public class BuildStartEventArgs : EventArgs 
{ 
    public bool Cancel { get; set; } 
} 

class Foo 
{ 
    public event EventHandler<BuildStartEventArgs> BuildStart; 

    private void Bar() 
    { 
     //build started 
     OnBuildStart(new BuildStartEventArgs()); 
     //how to catch cancellation? 
    } 

    private void OnBuildStart(BuildStartEventArgs e) 
    { 
     if (this.BuildStart != null) 
     { 
      this.BuildStart(this, e); 
     } 
    } 
} 
  0

기존 System.CancelEventArgs 클래스를 사용하지 않는 이유는 무엇입니까? 22 feb. 092009-02-22 12:42:39

  0

btw에서 보겠습니다. System.ComponentModel.CancelEventArgs입니다. :) 22 feb. 092009-02-22 13:04:14

5

는이 코드를 수정해야 object는 이벤트 참조의 매개 변수입니다.

  0

감사합니다. 22 feb. 092009-02-22 12:51:00

+1

프로그래밍에서 모든 것이 어렵지는 않다 ... 그냥 그런 식으로 보입니다 :-) 22 feb. 092009-02-22 13:19:28


1

BuildStartEventArgs 클래스에 부울 Cancel 속성이 있습니다. 이벤트 처리기가이를 플래그 할 수있게하십시오. 귀하의 BuildStartEventArgs

private void Bar() 
{ 
    //build started 
    var args = new BuildStartEventArgs(); 
    OnBuildStart(args); 
    if (args.Cancel) 
    { 
    //cancel 
    } 

} 
  0

질문의 예제에서 BuildStartEventArgs 클래스에 이미 부울 Cancel 속성이 있습니다. 가치가 22 feb. 092009-02-22 12:41:59

  0

downvoting 가치가 있습니까? 22 feb. 092009-02-22 12:45:04


1

이 중복 프레임 워크가 이미 CancelEventArgs 클래스를 제공합니다 -을 사용하는 것이 좋습니다.

  0

팁 주셔서 감사. 그러나 클래스에는 추가 속성이 있습니다. 여기서는 작성하지 않았습니다. 22 feb. 092009-02-22 12:44:27

+2

하지만 CancelEventArgs에서 상속받을 수 있습니다! 22 feb. 092009-02-22 12:58:40