Zum Inhalt springen

DepencyObject, Multithreading und static


Empfohlene Beiträge

Geschrieben

Grüße,

ich lese immer wieder in der MSDN folgenden Satz:

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Die Frage die sich mir, vor Allem bei DepencyObjects, stellt, ist, warum Instanzmember dieses nicht gewährleisten.

In der Theorie könnten doch alle Member(Ich geh erstmal nur von Properties aus) eigentlich die "threadsicheren" Klassenmethoden aufrufen.

Ich stell mir das in etwa so vor:



        private delegate object GetValueDelegate(DependencyObject obj, DependencyProperty dp);


        private static object GetValue(DependencyObject obj, DependencyProperty dp)

        {

            if (obj.CheckAccess())

                return obj.GetValue(dp);

            return obj.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new GetValueDelegate(GetValue), obj, dp);

        }


        private delegate void SetValueDelegate(DependencyObject obj, DependencyProperty dp, object value);


        private static void SetValue(DependencyObject obj, DependencyProperty dp, object value)

        {

            if (obj.CheckAccess())

                obj.SetValue(dp, obj);

            else

                obj.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new SetValueDelegate(SetValue), obj, dp, value);

        }


        public object Item

        {

            get { return GetValue(this, ItemProperty); }

            set { return SetValue(this, ItemProperty, value); }

        }

Bevor ich aber irgendwie ein Designproblem verursache wollt ich lieber nachfragen, ob es einen besonderen Grund dafür gibt.

Ähnliches könnte man natürlich auch mit Methoden veranstalten.

Geschrieben

Also ich habe Threadsicherheit eigentlich so verstanden, das aus jedem beliebigen Thread aufgerufen werden kann, egal von welchem Thread erstellt wurde, d.h. deine Methoden sind definitiv nicht threadsicher, da du invokest (Was ja bedeutet das du auf den Erstellerthread wechselst).

Oder hab ich da jetzt irgendwas total verpeilt? ^^

Geschrieben
Grüße,

ich lese immer wieder in der MSDN folgenden Satz:

Kann es sein, dass du das so auffasst, dass statische Member immer automatisch threadsicher sind? Das ist nicht der Fall. Die statischen Member dieses Typs sind so implementiert, dass sie threadsicher sind. Und die Instanzmember sind es eben nicht, da muss man sich ggf. selbst um die Synchronisierung kümmern.
Geschrieben

ahh, ok, verstanden.

Hatte mich wohl etwas verdacht.

Wenn invoke nicht als threadsicher gilt (da es den Thread wechselt), dann war das ein Verständnisproblem, danke.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...