2010-11-18 18 views
1

Ich fragte eine ähnliche Frage, so dass es tut mir leid, wenn das ein wenig repetitiv ist.Passing Elemente in Klasse C#

Hier ist meine Frage, ich habe eine Master-Seite, die ein Etikett auf Seite Last hat ich dieses Steuerelement zu einer globalen Klasse übergeben, die ich habe, innerhalb der Klasse ist so etwas wie:

global class: 

private static label myLabel; 

public label updateLabel 
{ 
    set { myLabel = value;} 
    get { return myLabel;} 
} 

auf dem Master Seite Load-Ereignis i do

global.updateLabel = labelOnMasterPage; 

jetzt sagen, dass ich eine Steuer irgendwo sonst in der Anwendung haben, und ich sage

global.updateLabel.Text = "my new text for label"; 

Dies wird das Etikett auf der Masterseite aktualisieren und alles funktioniert. Nun meine dies funktioniert mit nur einem Benutzer anmelden und diese App wird mehrere Benutzer haben, meine Frage ist, da ich die Bezeichnung in der globalen Klasse statisch deklarieren, wenn ich die Beschriftung auf einen Benutzer aktualisieren wird dies Auswirkungen auf die anderen Benutzer sehen ?

Gibt es einen besseren Weg dazu? Vielen Dank für Ihre Zeit.

+1

Es gibt gute Antworten auf Ihre vorherige Frage – Andrey

+0

Bitte Einrücken Sie Ihren Code wie die Anweisungen auf der rechten Seite vorschlagen (beim Bearbeiten), und akzeptieren Sie mehr Antworten. –

Antwort

0

Ja, static hier gilt für alle Code, die darauf zugreifen, unabhängig von Thread oder Benutzer. Es ist sehr selten, dass Sie ein Feld static in einer Umgebung mit hohem Threading wie ASP.NET möchten.

Sie verlängern auch künstlich die Lebensdauer der Etiketteninstanz lang über das hinaus, was beabsichtigt war.

Es gibt Alternativen wie die Sitzung des Benutzers oder die Anwendungsebene - aber speichern Sie die Zeichenfolge (wenn überhaupt), nicht das Label-Objekt.

0

Wenn es in einer statischen Klasse ist, werden alle Benutzer dasselbe sehen.

Sie müssen diese Art von Ansatz in einer ASP.net-Anwendung wegen der Anzahl der Threads vorsichtig verwenden. Wenn Sie das wirklich tun wollen, sollten Sie wahrscheinlich versuchen, es mit einer Sperre threadsicher zu machen.

Persönlich würde ich es in einer Datenbank speichern, scheint diese Art von Ansatz sehr hacky.