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(); 

    } 
} 

かそこら&それがしますユーザーにWindowsフォームを表示し、ユーザーはいくつかの値を入力します&その値をClass A - > doworkメソッドに戻す必要があります。次に "work 2"を続けるべきです

これはマルチスレッド...誰も私たちがこれをどのように実装できるのか考えていますか?

感謝:)

+1

Windowsフォームとは何を意味しますか?あなたはasp.netによってtagging質問をタグ付けするので、これはWebページだと思っていて、ユーザー入力を取りたいのですか? – 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