Avatar billede hsm Nybegynder
07. marts 2006 - 19:01 Der er 4 kommentarer og
1 løsning

System.InvalidOperationException was unhandled

Hej Eksperter,

Jeg arbejder på et program, der overvåger filaktivitet i et directory v.hj.a. en FileSystemWatcher.

Overvågningen startes ved tryk på en knap, og jeg har derfor lagt mine delegeringer i knappens eventhandler på denne vis:

watcher.Changed += new System.IO.FileSystemEventHandler(OnChanged);
watcher.Created += new System.IO.FileSystemEventHandler(OnCreated);
watcher.Deleted += new System.IO.FileSystemEventHandler(OnDeleted);
watcher.Renamed += new System.IO.RenamedEventHandler(OnRenamed);

Eventhandlerne ligger i Form klassen i Form1.cs filen.

Programmet compiler uden problemer, og eventhandlerne bliver også kaldt. Programmet går imidlertid ned med en System.InvalidOperationException.

Visual Studio giver mig følgende information:

Cross-thread operation not valid: Control 'watchTextBox' accessed from a thread other than the thread it was created on.

Jeg har ikke selv indbygget Threading i programmet, så jeg er lidt uforstående over hvorfor jeg mødes med dette problem.

Håber at der er nogen der har et bud på hvordan jeg løser dette problem?
Avatar billede erikjacobsen Ekspert
07. marts 2006 - 19:10 #1
Men filesystemwatcher gør det nok, det med tråde. Du skal nok bruge løsningen fra
http://www.vbcity.com/forums/topic.asp?tid=102168  (som godt nok er i VB - hvis du ikke kan oversætte den til C# så kan vi sikkert finde et eksempel senere).
Avatar billede Syska Mester
07. marts 2006 - 19:11 #2
watcher kører i en tråd for sig selv... og den kalder så dine Event, som prøver at smide ned i textbox's som den ikke selv ejer og det må man ikke i .NET 2.0..... :-)

// ouT
Avatar billede Syska Mester
07. marts 2006 - 19:13 #3
Her er en løsning på dit problem, fra et andet spm: http://www.eksperten.dk/spm/693243

// ouT
Avatar billede hsm Nybegynder
08. marts 2006 - 18:11 #4
buzzzz >> Du fik mig på rette spor, selvom den løsning jeg fandt var lidt anderledes:

void OnChanged(object sender, EventArgs e)
{
    if(InvokeRequired)
        Invoke(new EventHandler(OnChanged), new object[] {sender, e});
    else
    {
        // Update the UI
    }
}

Læg et svar, så du kan få dine points.
Avatar billede Syska Mester
08. marts 2006 - 18:15 #5
svar....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester