Benutzer mit den meisten Antworten
Konzept - XML Datei schreiben, lesen, Mehrfachzugriff

Frage
-
Hallo Community,
ich muss folgendes realisieren.
WinForm C# Applikation.
In einer Liste werden Chargen erfasst.
Im Beispiel 3 Einträge. -> in eine XML Datei gespeichert.
Die Applikation macht irgendwas (zählt)
Wenn die QUANTITY_ISBE == QUANTITY_MUSTBE ist, wird das Element FINISHED auf 1 gesetzt.
Anschließend geht es mit dem nächsten Chargenelement weiter.
Alles fertig, wird die Datei in den Ordner Finished verschoben.Soweit so gut. XML, DeSerialisierung zum Einlesen. -- ist klar.Problem.
Während des Prozesses können weiter Chargen erfasst werden.
Wie kann ich nun sicherstellen, dass das klappt.
Beispiel, die Applikation macht was, zählt. (Prozessablauf)
In diesem Moment werden parallel Chargen erfasst.
Wer schreibt jetzt die Datei, damit alles wieder stimmt.
Welche Konzepte bieten sich hierbei an.Vielleicht kann mir jemand aufzeigen, wie man so etwas prozesssicher löst.
Ich hoffe verstanden.
Die C# Exe macht was, zeitgleich(parallel) macht der Anwender noch was und beide wollen
dieselbe Datei manipulieren.
- Serialisierung
- Deserialsierung.
Am Anfang lade ich die 3 Chargen ein, gemäß Datei.
Schreibe ich immer die gesamte Datei, ich denke ja, habe ja eine Liste mit dem Objekt Charge.
Was ich noch sagen kann, Zugriff immer von derselben Applikation.
Ich habe eine WinForm.EXE und 2 eigene DLL's drin.
Meine Ansätze.
Productlist.XML
Productlist-001.XML
Productlist-002.XML
Productlist-003.XML
Jedes hinzufügen ruft ein Neuabspeichern mit einem Index hervor.
Gefällt mir nicht. Das muss doch besser, einfacher gehen.Gruß, Oliver<PRODUCT> <CHARGEN> <CHARGE> <NAME value="Supplier1" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="100" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="1" /> <FINISHED>1<FINISHED/> </CHARGE> <CHARGE> <NAME value="Supplier2" /> <QUANTITY_ISBE value="150" /> <QUANTITY_MUSTBE value="77" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="2" /> <FINISHED>0<FINISHED/> </CHARGE> <CHARGE> <NAME value="Supplier3" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="0" /> <EK value="0,79€" /> <VK value="0,99€" /> <POSITION value="3" /> <FINISHED>0<FINISHED/> </CHARGE> </CHARGEN> </PRODUCT>
Antworten
-
Hallo Oliver,
ein Lock ist nicht zwingend erforderlich, ob dieser benötigt wird hängt von der Art und Weise ab, mit der Du die Threads miteinander kommunizieren lässt. Wenn Du wie zuvor vorgeschlagen eine Queue verwenden willst, dann ist eine Lock Teil der Lösung.
Dein WorkingThread, als auch dein UserThread würden jeweils ihren Auftrag in die Queue legen und der Thread der die XML liest/schreibt arbeitet die Aufträge aus der Queue ab.
- Gruß Florian
- Als Antwort markiert Oliver Müller12 Dienstag, 6. Juni 2017 16:45
Alle Antworten
-
Hallo
wenn ich das lösen müsste, würde ich eventuell einen Workflow mit 3 Verzeichnissen aufbauen.
- Neue-Datei-Verzeichnis (wird überwacht)
- In-Bearbeitung-Verzeichnis
- Verarbeitet-Verzeichnis
Frage: "Zugriff immer von der selben Applikation", bedeutet, mehrere Anwender verwenden die selbe Software (Multi-User) oder es gibt nur einen "Sachbearbeiter" (Single-User)?
Letztlich gibt es aber sicher verschiedene Ansätze.
Das ein und dieselbe Datei gleichzeitig für die Neuanlage von "Chargen" und die "Verarbeitung, Zählung" verwendet wird, sehe ich schon deshalb als problematisch an, weil die Chargen scheinbar keinen eindeutigen "Schlüssel" haben. Dies dürfte auch die mit Abstand komplizierteste Lösung werden und es stellt sich mir gerade die Frage, weshalb du nicht einfach eine kleine Datenbank verwendest.
Gruß -
Hallo,
Ist eine SingleUser Anwendung.
1 Bearbeitungsprozess und parallel kann nachgelegt werden.
Wie meinst das mit der Datenbank?
XML Dataset oder SQL Server.
Kannst da ein Beispiel geben?
Dateien kosten nichts;-)Es gibt einige kostenlose Datenbanken, daran sollte es nicht scheitern ;-), hier ein paar Beispiele:
SQL Server 2016 SP1 Express Edition
Meines Erachtens kannst du damit alle möglichen Fälle abdecken. Und wie schon erwähnt, ich würde jeder Charge eine eindeutige ID mitgeben.
Gruß
-
Hallo Oliver Müller12,
du schreibst:
In einer Liste werden Chargen erfasst
Es gibt also nur eine Liste.
und:Ist eine SingleUser Anwendung.
Es gibt also nur eine Anwendung, die von einem Benutzer verwendet wird und auf die Liste zugreift.
Inwiefern kann es unter diesen Umständen Probleme mit Mehrfachzugriff geben?
Deine Anwendung kann doch einfach das vorhandene xml einlesen, die Änderung hinzufügen und wegschreiben. Ob die Änderung durch Programmereignisse oder Benutzereingaben erfolgt, dass ist doch für den wegschreibenden Thread total egal.- Gruß Florian
-
...Während des Prozesses können weiter Chargen erfasst werden.
Wie kann ich nun sicherstellen, dass das klappt.
Beispiel, die Applikation macht was, zählt. (Prozessablauf)
In diesem Moment werden parallel Chargen erfasst.
Wer schreibt jetzt die Datei, damit alles wieder stimmt.
Eine Frage zum Verständnis: wer liest die Chargen ein, deine Anwendung? Dann ist das Problem nicht sehr groß.
Eine externe Anwendung, welche die Datei überschreibt? Ist auch lösbar.
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
-
Hallo Zusammen,
>wer liest die Chargen ein, deine Anwendung?
meine Anwendung liest die Chargen ein, ja.Die Applikation macht die gesamte Zeit etwas, Ihren Workflow.
--> Änderungen der Chargen.XML Datei.
Parallel kann der Anwender nachlegen, die Chargenliste erhöhen.Somit können 2 Prozesse auf dieselbe Datei zugreifen.Kurzum, indem Moment wo der Prozess verbucht, klickt der Anwender auf eine neue Charge.Wäre super, wenn Du mir aufzeigen könntest, wie man das löst.
Wäre eine Lösung auf Dateiebene denkbar.---------------------------------------------------------------
So ganz klar ist mir die Datenbank nicht.
a) Wie würde die aussehen?
b) Wo liegen konkret die Vorteile?
Wenn ja wie? @K.Pater, evtl. kannst das konkretisieren.DANKE an ALLE.Gruß, Oliver -
Hi Oliver,
meinst Du mit 2 Prozessen den mehrfachen Start (2-fachen) der gleichen Anwendung?--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
meinst Du mit 2 Prozessen den mehrfachen Start (2-fachen) der gleichen Anwendung?
Hallo Peter,
ganz einfach. Es ist eine EXE mit 2 DLL's. (Wird nicht zweimal gestartet!)
Der Anwender kann parallel nachlegen, also die Chargen.
Zeitgleich bearbeitet dieselbe EXE die Chargen ab. Greifen in meinem Fall evtl. zeitgleich auf die XML Datei zu.
Der Prozess und eben der Bediener der nachlegt. Hoffe klar.
Super wäre
A) Über Datei, XML
B) Über Datenbank
um Vor-/Nachteile zu erkennen. DANKE. Ich hoffe nun klar, was ich will, was ich benötige.
Gruß, Oliver
P.S. Siehe noch hier
https://www.file-upload.net/download-12526040/Datei_2_Zugriffe.jpg.html- Bearbeitet Oliver Müller12 Dienstag, 30. Mai 2017 16:50 Übersichtsbild
-
Hi Oliver,
dll's sind nur Container von Typen (Klassen) mit deren Member. Sie sagen noch nichts über eine mögliche logische Struktur des Datenzugriffs aus.Wenn in einer Klasse der einen dll der Datenzugriff auf die Datei verwaltet wird, die andere Klassen die Geschäftslogik enthalten, gäbe es bei passender Implementierung keine Probleme.
Beschreibe mal, was Deine dll's beinhalten.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
Hallo Peter,
1 DLL holt Daten.
Die zweite DLL speichert mir Daten ab.
Ich hätte auch alles in einer EXE tun können. Die 2 DLLs haben mit der Anfrage an für sich nichts zu tun. Das Problem ist eben sicherzustellen, dass die Chargenliste erweitert werden kann.
<CHARGE> <NAME value="Supplier2" /> ...... <CHARGE> <NAME value="Supplier100" /> ......
Der Name könnte natürlich gleich sein, wenn die nächste Charge vom gleichen Lieferanten kommt.
Da wäre der Einwand einer ID evtl. berechtigt.
Hoffe nun alles mal soweit klar.
Gruß, Oliver
- Bearbeitet Oliver Müller12 Dienstag, 30. Mai 2017 17:16
-
Hi Oliver,
wenn die 1. dll die Daten holt und die 2. dll die Daten wieder speichert, wer hält dann das Repository? Wenn z.B. die exe das Repository enthält, dann solltest Du dort die Logik überprüfen, warum ggf. mehrere Repositories genutzt werden, die dann zu den überlappenden Zugriffen führen können.--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
Hallo Oliver,
du schreibst, das deine Anwendung alleine sämtlich Schreibzugiffe auf die Datei hat.
Warum benötigst du dann zur Bearbeitungszeit (Prozess) dieses Datenformat? Wenn ich dich richtig verstehe, schiebst du lediglich die Datei in einen anderen Ordner, wenn dieser Auftrag abgearbeitet ist.
Wenn dem so ist, würde ich mir keine Sorgen um das Datenformat machen, während der Prozess läuft.
Ich würde eine Collection erzeugen, wo jede Charge ein Item ist. Diese Collection würde ich zur Laufzeit Serialisieren/Deserialisieren.
Und zwar an nur einer Stelle im Programm.
Dies wiederum kann in einer statischen Klasse passieren, welche anderen Threads signalisiert, das sie gerade beschäftigt ist, so das in dem Fall gewartet werden muss.
Wenn dir das warten zu lange dauert oder du es prinzipiell vermeiden willst, kannst du auch eine Job - Queue<T> nutzen. Deine Threads füttern die Queue mit Schreibaufträgen, welche dann nach dem FIFO prinzip abgearbeitet werden.
http://www.mycsharp.de/wbb2/thread.php?threadid=80713
https://stackoverflow.com/questions/13416889/thread-safe-queue-enqueue-dequeue
https://stackoverflow.com/questions/530211/creating-a-blocking-queuet-in-net
Und wenn dein Auftrag zu Ende ist, schreibst du die XML Datei.Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 6. Juni 2017 06:59
-
Hi Oliver,
Du verwaltest Datenobjekte (Chargen). Wo die Datenobjekte gespeichert werden, sollte der Geschäfts- und Anzeigelogik des Programmes egal sein. Die Datenzugriffsschicht organisiert die Bereitstellung, ggf. Pufferung (Repository) und das Rückspeichern von Änderungen.Solange es nur eine Anwendung gibt, die auf die Daten zugreift, und diese Anwendung nur einmal gestartet wird und in dieser Anwendung der Datenzugriff zentralisiert ist, spricht nichts gegen das Speichern der Datenobjekte in einer Datei. In welcher Form die Datenobjekte in der Datei gespeichert werden, ist egal. XML sollte wegen der Möglichkeiten dafür favorisiert werden.
Sobald jedoch von verschiedenen Stellen (unterschiedliche Stellen im Programm, mehrere Programminstanzen parallel auf einem Rechner oder mehreren Rechnern im Netz) auf die externen Daten zugegriffen werden soll, geht kein Weg an einem Datenbankserver vorbei.
Bei einer strikten Trennung der Funktionen zwischen der Geschäftslogik und der Datenzugriffslogik, kann erst einmal mit XML-Dateien angefangen werden und später dann ggf. durch eine neue Datenzugriffslogik für einen Datenbankserver ersetzt werden. Wenn sowieso klar ist, dass langfristig mehrere Instanzen parallel laufen werden, sollte sofort mit einer Datenzugriffsschicht für den Datenbankzugriff begonnen werden, z.B. erst einmal mit einer Datenbank für einen Arbeitsplatz. Mit Änderung der Verbindungszeichenfolge kann dann problemlos auch ein Datenbankserver ohne Änderung des Programmes eingesetzt werden.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
Hallo Oliver,
meine Anwendung liest die Chargen ein, ja.Die Applikation macht die gesamte Zeit etwas, Ihren Workflow.
--> Änderungen der Chargen.XML Datei.
Parallel kann der Anwender nachlegen, die Chargenliste erhöhen.Somit können 2 Prozesse auf dieselbe Datei zugreifen.Kurzum, indem Moment wo der Prozess verbucht, klickt der Anwender auf eine neue Charge.Wäre super, wenn Du mir aufzeigen könntest, wie man das löst.
Wäre eine Lösung auf Dateiebene denkbar.---------------------------------------------------------------
So ganz klar ist mir die Datenbank nicht.
a) Wie würde die aussehen?
b) Wo liegen konkret die Vorteile?
Wenn ja wie? @K.Pater, evtl. kannst das konkretisieren.es ist etwas problematisch für mich, die Funktionsweise deiner Software nachzuvollziehen. Du verwendest Begriffe wie "Prozess" oder "Parallel" scheinbar eher im umgangssprachlichen Sinne.
Und selbstverständlich kannst du auch in einer "Single-User-Anwendung" Probleme mit parallelen Zugriffen auf eine z.B. Textdatei haben. Mögliche Kollisionen sind da nicht zwingend per se auszuschließen.
Aufgrund der Preisangaben in den gezeigten XML-Daten nehme ich an, es handelt sich um irgendeine Handelsware. Der "Supplier" (ich übersetzte das für mich mit "Lieferant") ist sicher ein Merkmal eines Artikels. Wenn das Szenario so ist: Verschiedene Lieferanten können den selben Artikel liefern (Beispiel: Aspirin kann in einer Apotheke von verschiedenen Großhändlern oder dem Hersteller geliefert werden), ist dieses Merkmal wichtig aber für den Artikel an sich nicht identifizierend. Jede Packung Aspirin stammt aus einer "Charge". Packungen aus einer "Charge" können in diversen Apotheken landen. Ich vermute aber, dass du Charge hier als Lieferung verstehst.
Ich könnte das jetzt noch weiter ausführen, aber ich hoffe, dass das verständlich macht, weshalb ich eine den Artikel identifizierende ID vermisse.
Wie eine Datenbank installiert wird, dass ist wie mit jeder anderen Software auch. Download, Installer aufrufen, ggf. Konfiguration. Ich glaube, z.B. die MySQL-Datenbank ist in ca. 5 Minuten eingerichtet. Dazu brnötigst du noch den Connector (analog für SQLite), einen entsprechenden Verweis aufnehmen und Daten verarbeiten.
Was macht die Beantwortung deiner Frage (für mich) noch schwierig? Du sagst, deine Anwendung stellt zwei "Prozesse" zur Verfügung. Das kann alles mögliche sein. Ist einer dieser Prozesse "autonom" (Zitat: "Die Applikation macht die gesamte Zeit etwas") oder müssen beide "Prozesse" vom Anwender exklusiv bedient werden und können nicht "parallel" ablaufen, beispielsweise: Der Anwender gibt ENTWEDER Quantitäten zu bestehenden "Chargen" ein (sind damit Lieferungen gemeint?) ODER er erfasst neue "Chargen" ODER wird eine dieser Aufgaben zumindest partiell autonom durchgeführt?
Also. Letztlich möglich dürfte beides sein, Datenbank oder XML-Datei. Ich persönlich würde eine Lösung auf Basis einer MySQL-Datenbank wählen (einfach deshalb, weil ich die am besten kenne :D)...
Falls du die Datenbanklösung ggf. für sinnvoll erachtest aber nicht genau siehst, wie du das umsetzen könntest, ist das eine andere Frage, die hier vermutlich auch gelöst werden kann.
Gruß
-
Hallo K.Pater,
ja, Du hast im Grundsatz schon verstanden was ich eigentlich suche.
Ich habe auch nur einen kleinen Part erwähnt, was die Anwendung tun soll.>Und selbstverständlich kannst du auch in einer "Single-User-Anwendung" Probleme
>mit parallelen Zugriffen auf eine z.B. Textdatei haben.
>Mögliche Kollisionen sind da nicht zwingend per se auszuschließen.Ich habe einen Auftrag, der muss Chargen bearbeiten, die in einer XML Datei hinterlegt sind.
Die Anwendung hat einen internen Prozess, prüft diverse Punkte und setzt das
<FINISHED>1</FINISHED> auf 1 wenn es abgearbeitet wurde.
In derselben Anwendung kann während des internen Prozesses (eine Art SPS Schrittkette) weiterhin Chargen hinzugefügt werden.
Die erfolgt durch den Bediener der in einem Textfeld was eingibt und dann auf hinzufügen klickt.
Es handelt sich dabei um dieselbe Applikation, Exe, also ein SingleUserAnwendung.Im Grundsatz funktioniert das auch, sehe aber bei meiner Implementierung die Gefahr, dass
der Anwender hinzufügt und in dem Moment der interne Prozess (eine Art SPS Schrittkette) auch auf die Datei zugreift,
was dann nicht mehr als prozesssicher gilt.Prozess 1 --> automatisches Abarbeiten der Chargen
Prozess 2 --> Hinzufügen von neuen ChargenWie kann ich das sicher erreichen? Was müsste ich da tun?Prozess 1 geht die Liste durch und nimmt die erste Charge die Finished 0 aufweist.
Prozess 2 --> fügt einfach ein neues Paket hinzu, kann durchaus den gleichen Supplier (Lieferanten) habenStichworte sind dann
ConcurrentDictionary
lock Mechanismus
WriteFile
Problem der Prozess 1 ändert QUANTITY_ISBE ab.
Prozess 2 fügt eine neue Charge hinzu
Das Schreiben könnte man mit lock evtl. hinbekommen.
etc.
Bis dato verwende ich halt eine 'normale' Liste mit dem Typ List<Charge>
Müsste ich da dann auch was ändern...?Wie gesagt, wäre es super, wenn Ihr mir etwas Coding geben könntet.
Gruß, Oliver
<!--..... Startup Chargenliste --> <PRODUCT> <CHARGEN> <CHARGE> <NAME value="Supplier1" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="100" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="1" /> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier2" /> <QUANTITY_ISBE value="150" /> <QUANTITY_MUSTBE value="77" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="2" /> <FINISHED>0</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier3" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="0" /> <EK value="0,79€" /> <VK value="0,99€" /> <POSITION value="3" /> <FINISHED>0</FINISHED> </CHARGE> </CHARGEN> </PRODUCT> <!--..... nach 10 Minuten erhöht sich die Chargenliste --> <PRODUCT> <CHARGEN> <CHARGE> <NAME value="Supplier1" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="100" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="1" /> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier2" /> <QUANTITY_ISBE value="150" /> <QUANTITY_MUSTBE value="77" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="2" /> <fins></fins> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier3" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="0" /> <EK value="0,79€" /> <VK value="0,99€" /> <POSITION value="3" /> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier4" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="0" /> <EK value="0,79€" /> <VK value="0,99€" /> <POSITION value="4" /> <FINISHED>0</FINISHED> </CHARGE> </CHARGEN> </PRODUCT> <!--..... nach 20 Minuten wird die Liste wieder größer --> <PRODUCT> <CHARGEN> <CHARGE> <NAME value="Supplier1" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="100" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="1" /> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier2" /> <QUANTITY_ISBE value="150" /> <QUANTITY_MUSTBE value="77" /> <EK value="0,69€" /> <VK value="0,89€" /> <POSITION value="2" /> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier3" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="0" /> <EK value="0,79€" /> <VK value="0,99€" /> <POSITION value="3" /> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier4" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="0" /> <EK value="0,79€" /> <VK value="0,99€" /> <POSITION value="4" /> <FINISHED>1</FINISHED> </CHARGE> <CHARGE> <NAME value="Supplier5" /> <QUANTITY_ISBE value="100" /> <QUANTITY_MUSTBE value="0" /> <EK value="0,79€" /> <VK value="0,99€" /> <POSITION value="5" /> <FINISHED>0</FINISHED> </CHARGE> </CHARGEN> </PRODUCT>
-
Hallo Oliver,
was dann nicht mehr als prozesssicher gilt.Prozess 1 --> automatisches Abarbeiten der Chargen
Prozess 2 --> Hinzufügen von neuen ChargenWie kann ich das sicher erreichen? Was müsste ich da tun?Du solltest Dir mal die Definition zu einem Prozess (auch Task genannt) durchlesen, denn das was Du da schreibst macht so überhaupt keinen Sinn - entweder Du hast mehrere Prozesse oder Du hast eine Single-User-Anwendung.
Grundlegend wurde Dir schon mehrfach unter diesem Beitrag geschrieben, wie das zu lösen ist.
Ich fasse es noch einmal für die Single-User-Anwendung zusammen:
1. Es gibt einen Thread (Datenquelle) der das Lesen/Schreiben der XML Daten und die Verwendung der Daten verwaltet
2. Der Thread der die Chargen automatisch abarbeitet fragt von der Datenquelle die benötigten Daten ab und teilt diesem mit welche hinzuzufügen sind
3. Wie 2 nur für den anderen Thread der Chargen hinzufügt
4. weitere Threads die Daten mitteilen/holenWann die Daten geschrieben werden ist, für die Threads die Änderungen mitteilen, völlig egal. Die Datenquelle stellt sicher das die Daten verfügbar und valide sind.
Stefan Krömer hat das weiter oben auch schon mit Details und Links zum Thema ausgeführt.
Wenn es tatsächlich mehrere Prozesse sind, dann sollte eine Serveranwendung den Dateizugriff regeln und Prozess 1 und 2 sollten dieser die Änderungswünsche mitteilen.
Zwei Prozesse auf die gleiche Datei schreibend und lesend zugreifen zu lassen ist regelmäßig keine gute Idee. In einer Anwendung parallel in die gleiche Datei zu schreiben ist absolut unnötig und leicht vermeidbar - verwende kein Multithreading und falls doch, lasse nur einen Thread schreiben.
- Gruß Florian
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 6. Juni 2017 07:00
-
Zwei Prozesse auf die gleiche Datei schreibend und lesend zugreifen zu lassen ist regelmäßig keine gute Idee. In einer Anwendung parallel in die gleiche Datei zu schreiben ist absolut unnötig und leicht vermeidbar - verwende kein Multithreading und falls doch, lasse nur einen Thread schreiben.
Hallo Florian,
ja ok.
Es gab ja bei meiner Fragestellung Unstimmigkeiten bezgl. Prozess, Task etc.
WorkingThread, der arbeitet die Chargen ab.
UserThread, der Chargen hinzufügen kann.
Sollte hier noch jemand was beitragen, wäre es sehr nett und hilfreich.
>...lasse nur einen Thread schreiben
Kannst Du mir da bitte es verdeutlichen. Dann brauche ich den Lock Mechanismus. Sehe ich das richtig?
Schöne Pfingsten noch.....
Gruß, Oliver
-
Hallo Oliver,
ein Lock ist nicht zwingend erforderlich, ob dieser benötigt wird hängt von der Art und Weise ab, mit der Du die Threads miteinander kommunizieren lässt. Wenn Du wie zuvor vorgeschlagen eine Queue verwenden willst, dann ist eine Lock Teil der Lösung.
Dein WorkingThread, als auch dein UserThread würden jeweils ihren Auftrag in die Queue legen und der Thread der die XML liest/schreibt arbeitet die Aufträge aus der Queue ab.
- Gruß Florian
- Als Antwort markiert Oliver Müller12 Dienstag, 6. Juni 2017 16:45