Behöver hämta this.Left men får felmeddelande "The calling thread cannot access this object because a different thread owns it". Left är en property på en WinForms-kontroll som du försöker att accessa från en annan, eller hur? Man skall ALDRIG accessa GUI-kontroller från en annan tråd än GUI-tråden.Timer - "cannot access this object because a different thread owns it"
if (this.Left == 0)
{
//Do something
}
else
{
this.Left += 1;
}Sv: Timer - "cannot access this object because a different thread owns it"
I klassen Timer kan man läsa "The method does not execute on the thread that created the timer; it executes on a ThreadPool thread supplied by the system." Dvs från en annan tråd än GUI-tråden. Om du skall anropa GUI-saker så får du använda BeginInvoke för att få anropet att köras i GUI-tråden.
Om du istället använder Timer-komponenten i WinForms så fungerar det bättre eftersom den skickar Windows-meddelanden som kommer att trigga din event handler i GUI-tråden vilket gör att det fungerar bättre.
WPF verkar kunna råka ut för samma sak, se http://blogs.msdn.com/wpfsdk/archive/2006/06/23/Animating_Traffic_Map_Image_Data.aspx för en beskrivning av problemet och hur man löser det. Där finns det en klass DispatchTimer som kör i WPF:s UI-tråd.
/Andreas