Feedback

C# - Threadsicheres Zuweisen von Control-Eigenschaften

Veröffentlicht von am 16.04.2008
(6 Bewertungen)
Wenn aus einem anderen Thread eine Eigenschaft in einem Form-Control geändert werden soll, so muss man mit Callbacks und Invoke arbeiten.
Mit diesem generischen Delegate und der dazugehörigen Funktion, kann man eine Menge Code sparen.
GFU-Schulungen  [Anzeige]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

VB.NET 2017/2015/2013 Komplett

Ziel des Seminars ist der flexible Umgang mit VB.NET, wie z.B. die damit verbundene eigenständige Entwicklung von Programmen oder das Verwenden von Datenbanken.

private delegate void SetPropertyValueCallback<ControlType, PropertyType>(ControlType control, string propertyName, PropertyType value) where ControlType : Control;

private void SetPropertyThreadSafe<ControlType, PropertyType>(ControlType control, string propertyName, PropertyType value) where ControlType : Control
{
	if (control.InvokeRequired)
	{
		SetPropertyValueCallback<ControlType, PropertyType> cb = new SetPropertyValueCallback<ControlType, PropertyType>(SetPropertyThreadSafe);
		control.Invoke(cb, new object[]{ control, propertyName, value });
	}
	else
	{
		System.Reflection.PropertyInfo property = control.GetType().GetProperty(propertyName);
		property.SetValue(control, value, null);
	}
}

//Anwendung
SetPropertyThreadSafe<ProgressBar, int>(pbState, "Value", (int)syncState.PercentFinished * 100); 
SetPropertyThreadSafe<Label, string>(lblState, "Text", syncMessage);

3 Kommentare zum Snippet

Tim Hartwig schrieb am 16.04.2008:
Sehr schön, kann ich gebrauchen. Danke!
Ilja Smorguner schrieb am 06.05.2008:
Sehr gut!!! Danke!
Rainer Hilmer schrieb am 25.08.2008:
Perfekt. Die Anwendung geht sogar noch einfacher:
SetControlProperty(pbState, "Value", (int)syncState.PercentFinished);
SetControlProperty(lblState, "Text", syncState.SyncMessage);
 

Logge dich ein, um hier zu kommentieren!