Frage

Ich habe eine Sammlung von Aufträgen. Ich möchte die Datenbank einmal schlagen, die Aufträge abrufen, speichern sie und dann in der Lage sein, diese Sammlung zugreifen über mehrere Formulare. Ich weiß, in asp.net, Sie Dinge wie Anwendungsobjekt oder Session-Objekt verwenden können, aber wie wollen Sie tun es in einer Win Form app? Ich dachte an eine statische Sammlung zu schaffen, die durch mehrere Formulare, Klassen, oder wo auch immer zugegriffen werden kann. Klingt das richtig und ist es sogar möglich?

Dank

War es hilfreich?

Lösung

Der grundlegende Unterschied in WebForms & WinForms ist, dass WinForms Stateful sind. Mit anderen Worten, können Sie sicherstellen, dass die Objekte, die Sie einmal zur Verfügung stehen laden, bis das Programm heruntergefahren wird. Das gleiche gilt nicht für WebForms als HTTP staatenlos und ASP.Net webt viele „Magie“ [Viewstate, Server-Sitzung, Plätzchen, versteckte Felder etc.] zusammen zu kleben Seiten einer Web-Anwendung.

Mit diesem Grundkonzept der Art und Weise, ist es einfach, ein Objekt global verfügbar in WinForms zu machen. Verwenden Sie eine Singleton / Static Klasse und weisen ihre Mitglieder. Man könnte immer .Instance sagen .. [im Fall von statischen Klassen / Klassen mit statischen Eigenschaften] Werte von jeder Form abgerufen werden.

Ein Gottcha ist „Thread-Sicherheit“ ... Auch bekannt als .. mehrere Formulare Lesen / Schreiben auf die statische Eigenschaft in der gleichen Zeit. Wenn Sie sich darum kümmern können, Rest ist ein Kinderspiel.

Für die oben beschriebene Problem:

Sie können Ihre eigene Singleton Cache-Klasse haben, die Datensätze gespeichert werden. Die Cache-Klasse wird eine benutzerdefinierte Sammlung Implementierung sein. Sie müssen sicherstellen, dass es Thread-sicher [oder sicher nur Lasten, sobald Ihr Antrag und liest von da an] ... Sie können ein vollwertiges ORM beachten müssen, wenn Sie Änderungen an der Datenbank in Ihre Entitätsobjekten reflektiert wollen .

CacheList.OrderCache[orderNo].Customer.Address.City = "Las Vegas";

class static CacheList { public static Cache OrderCache {get; internal set;}

}

public class Cache : CollectionBase where T : Entity { .....

}

Andere Tipps

Sie sollten einige Data Object haben, der auf die Datenbank zugreift sowieso, nicht wahr? Wickeln Sie, dass in einer CacheProxy Klasse, die die Datenbank trifft, wenn es nicht eine lokale Kopie verfügt. Ich höre Sie können den System.Web Cache in WinForms als auch nutzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top