Hey!
Ich verwende in meinem Source einen Timer und wenn der abläuft also elapsed kommt eine unschöne Fehlermeldung, welche ich nicht ganz verstehe, und zwar:
The calling thread cannot access this object because a different thread owns it
Weißt jemand warum diese Exception geschmissen wird?
Hallo,
wie sieht denn dein Code aus?
Verwendest du mehrere Threads?
Welchen Timer verwendest du?
Nein, das ist der einzige Thread den ich verwende
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Shapes;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Timers;
namespace TeamSuite_Chat_Client
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
TeamSuite_Chat_Client.ServiceReference.InstantMessageClient imc = new TeamSuite_Chat_Client.ServiceReference.InstantMessageClient();
TeamSuite_Chat_Client.ServiceReference.MessageInformation mi = new TeamSuite_Chat_Client.ServiceReference.MessageInformation();
TeamSuite_Chat_Client.ServiceReference.Receiver r = new TeamSuite_Chat_Client.ServiceReference.Receiver();
TeamSuite_Chat_Client.ServiceReference.MessageStatus ms = new TeamSuite_Chat_Client.ServiceReference.MessageStatus();
TeamSuite_Chat_Client.ServiceReference.Messages m = new TeamSuite_Chat_Client.ServiceReference.Messages();
Timer t = new System.Timers.Timer();
public Window1()
{
InitializeComponent();
t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
t.Interval = 3000;
}
public void t_Elapsed(object source, ElapsedEventArgs e)
{
try
{
r.UserID = Convert.ToInt32(textBox3.Text);
m.Message = imc.GetMessage(r).Message;
label1.Content = m.Message;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
Hallo schillerdeluxe,
klingt nach [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke). Verwende besser System.Windows.Forms.Timer.
herbivore
Hallo schillerdeluxe!
Vorm gleichen Problem stand ich vor ein paar Tagen.
Soweit ich weiß, laufen die Timer immer in einem eigenen Thread. Um im elapsed-ereignis auf Objekte anderer Threads zugreifen zu können (bei mir wars ein Control in meinem GUI), musst du das timer.SynchronisingObject auf deinen aktuellen thread festlegen.
Also quasi t.SynchronizingObject = this
Gruß, Andi