2011-07-20 8 views
0

UIを持たないcommandline呼び出しから呼び出すか、UIから呼び出すようにコードを最適化しようとしています。C#外部コードからフォームコントロールを更新するにはどうすればいいですか

問題は、フォームクラス内でworker-codeを呼び出すことができるということです。 ここでは、そのワーカーコードを別のクラスに引き出したいと思います。

私のニーズをより明確にするために、少量のサンプルを作ることができます:

public partial class form1 :Form 
{ 
    void AddLogmessage(String msg) 
    { 
    // update an listview 
    ListViewItem item = new ListViewItem(); 
    item.Text = msg; 

    // Add the item to the ListView 
    LogView.Items.Add(item); 
    } 

// button on ui to start working 
private void btnStartTestRun_Click(object sender, EventArgs e) 
{ 
    try 
    { 
    DoSomeWork(); 
    } 
    catch(Exception ex) 
    {} 
} 

private void DoSomeWork() 
{ 
    // do some really generic hard work.... 
    AddLogMessage("working"); 

    // do some more generic long lasting hard work.... 

    AddLogMessage("working goes on..."); 

// in case of an error throw Exception 

} 

は、今私は(フォームクラス外で作業する作業員コードをrefcatorしたいのですが、UIに起こる事を報告することができますこのような(サーバーに結果を報告し、他のライブラリと通信)1がある場合)またはUIなしworkercodeを呼び出し、別のターゲットに他のreportingsを行う

何か:

public void AutomaticTaskHandler() 
{ 
    string[] cmdline = Environment.GetCommandLineArgs(); 
    Arguments args = new Arguments(cmdline); 

    if (args["automatic"] != null) 
    { 
     doSomeWork(); 
    } 
} 

この場合、メッセージをUIに報告する必要はありませんが、他のメッセージ(同じメッセージではありません!!)をサーバーに送信してください。

これは私がdoSomeWorkコードを2回書く必要がない最善の方法ですが、現在のシーンにあるメッセージのみを送信できるようにするにはどうすればよいですか?

私は約DelegatesEventsと考えていましたが、私はこの作業を行うためにこれに慣れていません。

ご協力いただければ幸いです。

おかげMeister_Schnitzel

答えて

0

基本的には、この方法SendMessageとのインタフェースIMessageTargetを作成します。 UIコードはUIにメッセージを出力するインターフェイスの実装を作成し、コンソールコードはメッセージをサーバーに送信するインターフェイスの実装を作成します。 doWorkメソッドを呼び出すと、IMessageTargetのインスタンスが提供されます。

関連する問題