Threading: saubere Übergabe einer Variable

12/10/2007 - 17:39 von Roland Aleksa | Report spam
Hi Leute,

ich benötige eine Ansatz für folgendes Problem
Ich habe eine statische Klasse mit statischen Variablen (klingt lustig ;-)).
Die Variablen sind entweder ulong oder [FlagsAttribute]public enum
Eigenschaft: ulong{...}.
Ich starte einen neuen Thread, der mir regelmàßig die Werte aus einer
Datenbank holt. Das klappt soweit auch ganz gut.

Die Frage ist jetzt: wie bekomme ich die Werte aus meinem Thread sicher in
die statischen Variablen der Klasse?
Normalerweise nehme ich Invoke aber das fàllt wohl aus, weil 1. kein Control
(und wenn - wie geht das überhaupt ohne Control?) und 2. static?

Beispiel:
static class Eigenschaften
{
[FlagsAttribute]public enum Eigenschaft : ulong{keine=0,}
private static Eigenschaft foo =Eigenschaft.keine;
private static ulong bar=0;
...
private static void setfoo(Eigenschaft e){foo=e;}
private static void setbar(ulong l){bar=l;}
...
private static ParameterizedThreadStart pts = new
ParameterizedThreadStart(aktualisiere);
private static Thread thread =new Thread(pts);
...
private static void aktualisiere(Object objekt)
{
ulong wert1=0;
...
// hier hole ich die Daten aus der Datenbank
...
// und jetzt die Rückgabe?! Wie geht sowas threadsicher?
}


public void lasJuckenKumpel(int zeitintervall)
{
thread.Start(zeitintervall);
}
}

Kann/Darf ich einfach, ohne Exception zu befürchten, in die Klassenvariablen
schreiben? Leider bekomme ich die nicht volatil :-(
Da ich die Werte an sehr vielen Stellen im Programm brauche wàre es
Ressourcenverschwendung, wenn ich jedesmal ein Objekt erstellen müsste und
dieses jeweils einen neuen Thread.

Ciao,
Roland
 

Lesen sie die antworten

#1 Thomas Scheidegger
12/10/2007 - 18:07 | Warnen spam
Hallo Roland

Die Variablen sind entweder ulong oder [FlagsAttribute]public enum
Die Frage ist jetzt: wie bekomme ich die Werte aus meinem Thread


sicher in
die statischen Variablen der Klasse?
Kann/Darf ich einfach, ohne Exception zu befürchten, in die


Klassenvariablen schreiben?


lies MSDN:
C#: 'lock' keyword
oder ggf .NET: Interlocked.Read / Interlocked.Exchange, Monitor, ...

viele Rahmenbedingungen sind da Informatik-Grundlage, kaum .NET-spezifisch.



Thomas Scheidegger - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen