Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C# und .NET ::  Thread.CurrentCulture change event     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
herb77
Unregistrierter




Beitrag herb77 Unregistrierter 13:36:54 03.03.2010   Titel:   Thread.CurrentCulture change event            Zitieren

Hallo,
gibt es ein event oder ähnliches, das ausleöst wird, wenn die Thread.CurrentCulture Eigenschaft eines Threads geändert wird? So in der Form:
Code:
Thread.CurrentThread.CurrentCultureChanged += new EventHandler ...
Code:
Thread.CurrentThread.CurrentCultureChanged += new EventHandler ...
Code:
Thread.CurrentThread.CurrentCultureChanged += new EventHandler ...

Müsste halt mitbekommen, wann sich die CultureInfo ändert.
Vielen dank im voraus.
looser
Unregistrierter




Beitrag looser Unregistrierter 19:14:15 10.03.2010   Titel:              Zitieren

Wenn es kein event gibt dann mach doch einfach nen eigenes Event, so zu sagen in einem Thread .... so ungefähr

Thread th1 = new ....
th1.Start()

static PreviousState = Thread.CurrentCulture.ToString();
void Thread_Event()
{
while(true)
{
if(Thread.CurrentCultureState != PreivousState)
{
CurrentCultureChanged(Thread.CurrentCultureState)
PreviousState = Thread.CurrentCultureState
}
}
}

void CurrentCultureChanged(string state)
{
MessageBox.Show("Neuer CurrentCulture_ding: " + state);
}


Oder so... so ähnlich .... :leak:
mogel
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2009
Beiträge: 510
Beitrag mogel Mitglied 19:45:00 10.03.2010   Titel:              Zitieren

blub - und weg ist ein Kern ... da fehlt noch ein Sleep

_________________
.http://www.fantasya-pbem.de. - Fantasy-Multiplayer-Strategie - Runden basiert
David W
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.08.2005
Beiträge: 4630
Beitrag David W Mitglied 21:53:00 10.03.2010   Titel:              Zitieren

Ich würde mich nicht darauf verlassen.
Ich denk da zum Beispiel an den BackgroundWorker, der erbt die Culture _nicht_ vom generierenden Thread.
D.H. ein generierter Thread muss nicht unbedingt die selbe Culture haben wie die Haupt Applikation.

Ich empfehle das setzen der Culture in eine Methode auslagern (oder ein Property) welches dann immer ein event Absetzt.

C# Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
public CultureInfo CurrentCulture
{
    get { return Thread.CurrentThread.CurrentCulture; }
    set
    {
        Thread.CurrentThread.CurrentCulture = value;
        Thread.CurrentThread.CurrentUICulture = value;
        OnCurrentCultureChanged();
    }
}
C# Code:
1
2
3
4
5
6
7
8
9
10
public CultureInfo CurrentCulture
{
get { return Thread.CurrentThread.CurrentCulture; }
set
{
Thread.CurrentThread.CurrentCulture = value;
Thread.CurrentThread.CurrentUICulture = value;
OnCurrentCultureChanged();
}
}
C# Code:
1
2
3
4
5
6
7
8
9
10
public CultureInfo CurrentCulture
{
    get { return Thread.CurrentThread.CurrentCulture; }
    set
    {
        Thread.CurrentThread.CurrentCulture = value;
        Thread.CurrentThread.CurrentUICulture = value;
        OnCurrentCultureChanged();
    }
}

_________________
My Libraries | aniwen


Zuletzt bearbeitet von David W am 21:55:07 10.03.2010, insgesamt 1-mal bearbeitet
herb77
Unregistrierter




Beitrag herb77 Unregistrierter 16:51:22 16.03.2010   Titel:              Zitieren

Danke,
ist im Prinzip beides möglich, hat aber auch beides seine Haken:
Zur Lösung von looser:
In "Thread_Event()" müsste natürlich der richtige Thread übwewacht werden. "Thread.CurrentThread" ist in diesem Kontext ja schon wieder ein anderer, nämlich der "Überwachungs-Thread" selber. Wäre aber einfach machbar, allerdings gibt es auch immer eine Zeitspanne, die von der Tatsächlichen Änderung bis zum Event vergeht. Außerdem wird das event in einem eigenen Thread ausgelöst, was ebenfalls zu Problemen führen kann (Stichwort Controls manipulieren, neu Zeichnen...). Trotzdem kann ich mit dieser Lösung evtl. etwas anfangen.
Zur Lösung von CSL:
Klar, funktioniert natürlich, solange ich eine Anwendung programmiere, und die CurrentCulture immer über dieses Property setzte. In diesem Fall habe ich ja sowieso selber die Finger drauf, die CurrentCulture ändert sich ja nicht einfach so, sondern wird vom Entwickler gesetzt. Problematisch wird es, wenn ich eine Bibliothek entwickle, welche von Dritten benutzt wird. Dann habe ich absolut keine Garantie, dass der Benutzer meiner Bibliothek das Property wirklich verwendet...

Also nochmals vielen Dank, habt mir beide ein Stückchen weiter geholfen!
David W
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.08.2005
Beiträge: 4630
Beitrag David W Mitglied 17:03:43 16.03.2010   Titel:              Zitieren

Bei Bibliotheken sollte man sowieso immer so vor gehen das jegliche Culture möglich ist, auch inkonsistent untereinander ;)

_________________
My Libraries | aniwen
herb77
Unregistrierter




Beitrag herb77 Unregistrierter 15:51:51 17.03.2010   Titel:              Zitieren

Klar, möglich ist ja auch immer jede Culture, kann man ja schlecht (und will man ja auch nicht) verbieten.
Aber als einfaches Beispiel:
Wenn ich zum Beispiel ein Control erstelle, das ja nach eingestellter Culture im GUI Thread eine Landesflagge anzeigen soll. Dann wäre es doch hilfreich wenn ich mitbekomme dass sich die Culture geändert hat und ich eine andere Flagge anzeigen muss. Natürlich geht die Welt nicht unter, wenn ich es an einer solchen Stelle nicht mitbekomme, und es ist ja trotzdem jede andere Culture erlaubt.
Mein Problem ist (bzw. war, hat sich fast komplett selbst gelöst):
Ich greife über Platform Invokes auf C++ klassen zu, die eine eigene Lokalisierung mitbrignen. Wenn ich jetzt beispielsweise einen "Double-String" von der C++ Klasse bekomme, die gerade eine Englische Kultur verwendet, und ich würde im managed Code mit Deutscher Kultur daraus wieder ein Double machen, hätte das ziemlich fatale Folgen...
Da die Lokalisierung der C++ Klasse aber über Umwege (gut versteckt) doch überschrieben werden kann, habe ich sie einfach über Callbacks auf die Thread.CurrentCulture.XXX (z.B DecimalPoint) umgeleitet. So wird jetzt automatisch immer, egal in welchem Thread, die gleiche Kultur wie im Managed Code verwendet.
C/C++ Forum :: C# und .NET ::  Thread.CurrentCulture change event   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.