2011-08-05 5 views
-1
우리가 이벤트를 발생시킬 것 내가 의심의 여지가

있습니다 .. "클래스 A"에서 콜백/위임

난 함수를 작성하고자하고 같이 표시됩니다

...

public class A  //this is just a class file 
{ 
    function dowork() 
    { 
     //work 1 

     INPUT = here in this line it should call a delegate function or raise event etc... 

     //work 2 using INPUT 
    } 
} 

public class B 
{ 
    function myfn() 
    { 
     A objA = new A(); 
     objA.dowork(); 

    } 
} 

정도 &는 것 사용자에게 윈도우 폼을 표시하고 사용자가 어떤 값을 입력하면 & 클래스 A -> dowork 메서드로 그 값을 반환해야합니다. 그러면 "작업 2"를 계속해야합니다.

또한 멀티 스레딩을 지원해야합니다. ... 아무도 우리가 이것을 구현할 수있는 방법을 알고 있습니까 ??

감사합니다 :)

+1

Windows Form을 말할 때 어떤 의미입니까? 당신은 asp.net에 의해 질문 tagging 그래서 나는 이것이 웹 페이지라고 생각하고 일부 사용자 입력을 잡아 줄까? – sll

답변

0

당신은이 목적을 위해 ManulResetEvent을 사용할 수 있습니다 : 당신은 당신의 입력 폼을 실행하고 할 때 A.dowork 방법에서 잡을 수 있도록 그 형태는 이벤트를 설정합니다. 행동 입력하면 무한 루프를 실행하는 동안,이 시간에 당신이 응용 프로그램을 담당하기 위해 이벤트 상태 및 프로세스 응용 프로그램 이벤트를 확인하십시오 또한

public class A  //this is just a class file 
{ 
    private ManualResetEvent _event; 

    public void dowork() 
    { 
    //work 1 

    _event = new ManualResetEvent(false); 
    //INPUT = here in this ... 
    Worker worker = new Worker(); 
    worker.DoInput(_event); 

    while(true) 
    { 
     if(_event.WaitOne()) 
     break; 
     Application.DoEvents(); 
    } 

    //work 2 using INPUT 
    } 
} 

class Worker 
{ 
    private ManualResetEvent _event; 

    public void DoInput(ManualResetEvent @event) 
    { 
    _event = @event; 

    // Show input form here. 
    // When it done, you call: _event.Set(); 
    } 
} 

, 나는 비동기 라이브러리를 사용 (당신이 할 수있는 경우) (그것이 제안 독립 실행 형 설정으로 사용 가능). 거기 당신은 훨씬 더 간단한 방법으로 그것을 구현할 수 있습니다

public class A  //this is just a class file 
{ 
    public async void dowork() 
    { 
    //work 1 

    //INPUT = here in this ... 
    Worker worker = new Worker(); 
    wait worker.DoInput(); 

    //work 2 using INPUT 
    } 
} 

class Worker 
{ 
    public async void DoInput() 
    { 
    InputForm form = new InputForm(); 
    wait form.ShowInput(); 
    } 
} 

public class B 
{ 
    async void myfn() 
    { 
    A objA = new A(); 
    wait objA.dowork(); 
    } 
} 

당신이 코드의 다른 부분은 어떤 UI 잠금 및 이벤트없이 실행다면 당신은 그냥 기다려 볼 수있다. 필요한 경우 여기에서 async/wait가 작동하는 방식에 대해 자세히 설명 할 수 있습니다.

+0

감사합니다 ... 확인하고 다시 당신에게 :) – nsrajesh