Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 49
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Threadsicheres Zuweisen von Control-Eigenschaften


Autor: Marcell Spies
Sprache: C#
Bewertung:
8.36 (6 votes)
Anzahl der Aufrufe: 13537
  
Kick it on dotnet-kicks.de  

Beschreibung:

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.


Abgelegt unter: generisch, callback, delegate, invokerequired, invoke, thread, threadsafe, safe.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Tim Hartwig schrieb am:  16.04.2008 21:05:08

Sehr schön, kann ich gebrauchen. Danke!
Ilja Smorguner schrieb am:  06.05.2008 15:42:52

Sehr gut!!! Danke!
Rainer Hilmer schrieb am:  25.08.2008 01:04:10

Perfekt. Die Anwendung geht sogar noch einfacher:
SetControlProperty(pbState, "Value", (int)syncState.PercentFinished);
SetControlProperty(lblState, "Text", syncState.SyncMessage);
Nick Stelter schrieb am:  06.08.2010 11:49:07

Vielen Dank! genau was ich gesucht hab! Funktioniert perfekt.


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.