Avatar billede martinbk Nybegynder
26. december 2007 - 18:08 Der er 4 kommentarer og
1 løsning

I/O operationer låser GUI

Hejsa jeg sidder her og roder lidt med noget programmel som skal kunne flytte nogle filer rundt lokalt på en maskine, pt. sidder jeg og nørkler med hvordan jeg får flyttet en I/O tung operation som File.Copy() over i sin egen tråd, vel og mærket uden at metoden som kalder File.Copy() kører videre før copy er fuldendt, formålet er self. at undgå min GUI låser når programmet skal kopiere en 1GB < fil, noget alla,

Metode1() // laver et directory
Metode2() // opdaterer diverse GUI billeder
Metode3() // indeholder en File.Copy()
Metode4() // undersøger den kopierde fil's metadata

så hvordan undgår jeg at min GUI låser samtidig med at Metode 4 ikke bliver udført før Metode3 er færdig?
Avatar billede arne_v Ekspert
26. december 2007 - 18:10 #1
Putter alle 4 kald i en metode som du kalder i en tråd ...
Avatar billede martinbk Nybegynder
26. december 2007 - 18:25 #2
det var da en mulighed, har du også en idé til noget lign. så fremt jeg har en metode der kalder en ekstern application, som jeg også gerne vil vente på

private void fileMetadata(FileInfo finfo)
        {
            try
            {
                ProcessCaller meta = new ProcessCaller(this);
                meta.FileName = @"C:\prog\vdub.exe";
                meta.Arguments = "-s " + scriptfile + " " + finfo.FullName;
                meta.StdErrReceived += new DataReceivedHandler(ReadMeta);
                meta.StdOutReceived += new DataReceivedHandler(ReadMeta);
                meta.Start();
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.ToString());
            }
        }

        private void ReadMeta(object sender, DataReceivedEventArgs e)
        {
            if (e.Text.Contains("Done"))
            {
                Thread.Sleep(200);
                System.Console.WriteLine("Done inspecting file");
            }
        }

ProcessCaller er en custom class der extender AsyncOperation fundet her http://msdn.microsoft.com/msdnmag/issues/03/02/Multithreading/default.aspx

problematikken er den samme jeg vil helst ikke have den kaldende metode (den der kalder ReadMeta() til at køre videre før operationen er færdig
Avatar billede arne_v Ekspert
26. december 2007 - 19:44 #3
Hvis du bruger en System.Diagnostics.Process i.s.f. så har den en WaitForExit metode.
Avatar billede martinbk Nybegynder
27. december 2007 - 17:11 #4
jeg har sørme fået skidtet til at virke ved hjælp af dine forslag arne, smider du lige et svar ?
Avatar billede arne_v Ekspert
27. december 2007 - 17:34 #5
kommer her
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