myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Von verschiedenen Threads auf Hauptinstanz zugreifen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Von verschiedenen Threads auf Hauptinstanz zugreifen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
padde77
myCSharp.de-Mitglied

Dabei seit: 11.08.2011
Beiträge: 50


padde77 ist offline

Von verschiedenen Threads auf Hauptinstanz zugreifen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich habe mal wieder ein Problem.
Ich habe einen Windowsservice welcher in der OnStart ein Plugin initialisiert.

C#-Code:
public class Service : MyPlugin
{
  MyLogic = _logic;
  protected override void OnStart(string[] args)
  {
      _logic = new MyLogic();
      // initialisiere noch einige Dinge der Logic....
      ....
     // Dann werden hier einige unterschiedliche Threads gestartet
     Thread checkWorker = new Thread(check.Check);
     checkWorker.IsBackground = true;
     checkWorker.Start();
  }
}

Wie kann ich nun Daten zwischen den Threads und Funktionen meiner Logic austauschen, also in beide Richtungen?

Danke schön
13.01.2020 14:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.365
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was hast Du denn vor, was ist das Ziel?
Dann kann man Dir einen Umsetzunsgvorschlag geben.

So ist nicht erkennbar, ob der Ansatz überhaupt in die richtige Richtung geht.
Prinzipiell spielen Threads nur wenig eine Rolle bei sowas, außer man hat irgendwelche BEsonderheiten (daher Frage ich nach dem Ziel).

Grundlegend können Konzepte wie Reactive Extensions, Event Sourcing und Messages ein Kommunikationsproblem in einer UI-Anwendung völlig losgelöst von Threads oder Technologie bereits lösen.
Will man sowas selbst bauen, endet das nicht selten im Chaos.
13.01.2020 14:50 Beiträge des Benutzers | zu Buddylist hinzufügen
padde77
myCSharp.de-Mitglied

Dabei seit: 11.08.2011
Beiträge: 50

Themenstarter Thema begonnen von padde77

padde77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

die Logic ist nicht Multithreading fähig, bzw. würde die sich für jeden meiner Threads (bis zu 30 Stück) neu initialisieren (an die Logic selbst komme ich nicht dran, kann da also nichts ändern), was mehrere Sekunden dauert und für jeden Thread auch Daten ablegt (SQLite-DB lokal), die dann von dem erst aufrufenden Thread gesperrt sind. Also muss ich für jeden meiner Threads die Logic neu in einem Unterordner (wegen DB) initialisieren.

Daher die Frage, ob ich die Logic einmalig initialisieren kann und dann von meinen Threads auf die Methoden in der Logic zugreifen kann.
13.01.2020 15:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.448
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Lies mal  [Artikel] Multi-Threaded Programmierung.
Generell kannst du Daten zwischen mehreren Threads austauschen, wenn du den Zugriff per lock absicherst.

Die Frage aber ist, wofür benötigst du bis zu 30 Threads? Gerade ein Windows-Service sollte ja ressourcenschonend arbeiten.
Wäre asynchrone Programmierung mittels Tasks nicht sinnvoller?
13.01.2020 17:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
padde77
myCSharp.de-Mitglied

Dabei seit: 11.08.2011
Beiträge: 50

Themenstarter Thema begonnen von padde77

padde77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe so viele Threads, weil ich einen Socket Server am laufen habe und sich viele Clients verbinden.
Oder liegt hier schon das Problem?
Und ist mein Service, also die OnStart Methode auch schon ein eigener Thread?
13.01.2020 18:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.365
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du kannst problemlos mittels der Callback-Variante einen Socket Server und async/await umsetzen.

Wenn Du es ganz bequem haben willst, kannst das als IHostedService implementieren, dann bekommst viele Sachen geschenkt.
13.01.2020 19:05 Beiträge des Benutzers | zu Buddylist hinzufügen
padde77
myCSharp.de-Mitglied

Dabei seit: 11.08.2011
Beiträge: 50

Themenstarter Thema begonnen von padde77

padde77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kannst du mir einen kleinen Schub in die richtige Richtung geben?
Anhand eines kurzen Quelltextes?
13.01.2020 19:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.365
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn Du nach  Google-Suche nach c# socket server async suchen würdest (Google is relativ neu), dann kommst in die  offizielle Microsoft Dokumentation mit einem Sample. smile

Wenn Du dann nach  Google-Suche nach Windows Service IHostedService suchst, dann siehste Beispiele bzgl. IHostedService. Daumen hoch
13.01.2020 19:30 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 28.01.2020 05:36