2012-04-14 13 views
1

私は、ソケットを使用して文字列を読み取っているwinformsアプリケーションがあり、ソケットはbackgroundWorkerスレッドの下にあります。C#4.0サービスクラスのInvokeの使用方法

状況はうまくいきますが、私のマネージャーは新しい企業標準に従って、このwinformsアプリケーションをスタートアップフォルダに入れてサービスとして実行したいと考えています。

問題は、我々は、この中のコードの行の下に使用しているアプリケーション

WinFormsのある
Invoke(new MethodInvoker(
        delegate { _logger.Error((String.Format("Error: {0}", _socketError))); } 
       )); 

誰かが私が

提案してくださいwindowservericeプロジェクトで上記のコード行を使用するために行うCA何を導くことができます

おかげ

更新:私はトンので呼び出す使用する必要があります彼の声明はbackgroundWorkerコンポーネントのDoWorkイベントで実行されています。

+0

何らかの種類のwinformコントロールに_logger.Errorが書き込まれますか? – Tung

+0

いいえ、ログファイルにロギングしています。これは基本的なNLogです – Shax

答えて

3

_loggerはログファイルに書き込んでいるだけなので、最初はInvokeの背後にある元の意図を理解していません。私はあなたがその行を次のように置き換えても安全だと思います:

_logger.Error(String.Format("Error: {0}", _socketError)); 
+0

Tung、私の投稿の更新されたコメントを参照してください – Shax

+0

UIコントロールのクロススレッド更新を実行していない限り、 'Invoke'は必要ありません。あなたはウィンドウサービスを作成しているので、UI要素を更新しない(ファイルにしか書いていない)ので、呼び出しをしないと 'Invoke'の中で呼び出しをラップする必要はありません。 – Tung

+0

それはバックグラウンドプロセスの下にあるので、クロススレッドエラーが発生します – Shax

関連する問題