2012-04-14 12 views
1

Ich habe eine Winforms-Anwendungen, die Strings mit Sockets liest und die Sockets sind im HintergrundWorker Thread.Wie benutze Invoke in C# 4.0 Serviceklasse

Die Dinge funktionieren gut, aber gemäß den neuen Unternehmensstandards möchte mein Manager, dass es als Dienst ausgeführt wird, anstatt diese winforms-Anwendung immer im Startordner zu platzieren.

Das Problem ist, dass wir unter Codezeile in diese verwenden WinForms-Anwendung

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

Kann jemand führen, was ca ich die obige Codezeile in dem windowserverice Projekt

bitte verwenden Sie vorschlagen

Dank

aktualisieren: ich brauche, weil t aufrufen verwenden Seine Anweisung wird im DoWork-Ereignis der backgroundWorker-Komponente ausgeführt.

+0

Ist _logger.Error schreiben in eine Art Winform-Steuerelement? – Tung

+0

Nein, es wird in eine Protokolldatei protokolliert. Dies ist Basciall ein NLog – Shax

Antwort

3

Da _logger ist nur in eine Protokolldatei schreiben, verstehe ich nicht die ursprüngliche Absicht hinter Invoke in erster Linie. Ich denke, Sie werden sicher diese Zeile ersetzen mit:

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

Tung, bitte sehen Sie die aktualisierten Kommentare meines Beitrags – Shax

+0

Shax, 'Invoke' ist nicht notwendig, es sei denn Sie Cross-Thread-Update eines UI-Steuerelement durchführen. Da Sie einen Windows-Dienst erstellen werden, ** und ** keine UI-Elemente aktualisieren (Sie schreiben nur in eine Datei), müssen Sie Ihren Anruf nicht innerhalb eines "Invoke" – Tung

+0

umbrechen, wenn ich dann nicht aufrufe es gibt Querfadenfehler, weil es unter Hintergrundarbeiterprozeß ist – Shax