Hallo Leute,
ist es in einer Statischen Klasse per Timer möglich auf Eigenschaften eines Objektes zuzugreifen, das von einem Objekt auf Form1 erbt?
In der Klasse muss ein Timer Deklariert sein, damit er zurück gesetzt werden kann während er aktiv ist. Auf Form1 befindet sich die TextBox tbLog.
Diese Exception wird ausgelöst: System.InvalidOperationException: "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement tbLog erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
Hier der Ausschnitt der Klasse:
Spoiler anzeigen
ist es in einer Statischen Klasse per Timer möglich auf Eigenschaften eines Objektes zuzugreifen, das von einem Objekt auf Form1 erbt?
In der Klasse muss ein Timer Deklariert sein, damit er zurück gesetzt werden kann während er aktiv ist. Auf Form1 befindet sich die TextBox tbLog.
Diese Exception wird ausgelöst: System.InvalidOperationException: "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement tbLog erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
Hier der Ausschnitt der Klasse:
C#-Quellcode
- static TextBox _logBox;
- static System.Timers.Timer timer = new System.Timers.Timer();
- static readonly double MillisecondsToClearClipbord = 5000;
- public static void SetTextBox(TextBox name) {
- _logBox = name; // <<< Hier wird tbLog übergeben
- }
- static void StartTimedClipboardCleaner() {
- if (timer.Enabled) timer.Elapsed -= OnTimedEvent_ClipboardClear;
- timer = new System.Timers.Timer(MillisecondsToClearClipbord);
- timer.Elapsed += OnTimedEvent_ClipboardClear;
- timer.AutoReset = false; // OnTimedEvent nur einmal auslösen
- timer.Enabled = true;
- }
- private static void OnTimedEvent_ClipboardClear(Object source, System.Timers.ElapsedEventArgs e) {
- try {
- timer.Elapsed -= OnTimedEvent_ClipboardClear;
- Thread tcc = new Thread(() => Clipboard.Clear()) { IsBackground = false };
- tcc.SetApartmentState(ApartmentState.STA);
- tcc.Start();
- _logBox.Text += "Clipboard cleared\n"; // <<< Hier wird die Exception ausgelöst.
- }
- catch (Exception ex) {
- System.Diagnostics.Debug.WriteLine(ex.Message);
- }
- }
Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)