Avatar billede glenn007 Nybegynder
22. januar 2009 - 13:20 Der er 6 kommentarer og
1 løsning

try catch

Hej har gjort således og får nogel gange bøvl med den ikke kan overskrive filen

public static void Capturedarea(Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath)
        {

            using (Bitmap thisbitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height))
            {

                using (Graphics g = Graphics.FromImage(thisbitmap))
                {
                    g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);
                }

                string savePath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + @"\userfile.bmp";
                try
                {
                    using (FileStream dstream = new FileStream(savePath, FileMode.Create))
                    {
                        thisbitmap.Save(dstream, ImageFormat.Bmp);
                        dstream.Close();
                    }
                }
                catch
                {
                }
            }
        }





Har jo indsat en try catch men er der ikke noget med at den kun prøver 3 gange.....  kan jeg indsætte hele kode i en try catch mere og derved få den til at blive ved nogle flere gange uden at søtte den i en uendelig løkke ?
Avatar billede bitmatic Nybegynder
22. januar 2009 - 14:06 #1
Der er ikke noget med at den prøver 3 gange. Ved ikke hvor du har det fra.

Frit fra leveren, så prøv med:

try
{
  using (FileStream dstream = new FileStream(savePath, FileMode.Create))
  {
    thisbitmap.Save(dstream, ImageFormat.Bmp);
  }
}
catch
{
  // her bør du så nok have noget fejlhåndtering....
}
finally
{
  dstream.Close();
}
Avatar billede aaberg Nybegynder
22. januar 2009 - 14:08 #2
Den kode du angiver, prøver bare en gang. Hvis den fejler, ignorerer den fejlen. Der er ikke nogen løkke som prøver flere gange i din kode.
Avatar billede annxii Nybegynder
22. januar 2009 - 15:19 #3
prøv at pak din try-catch ind i følgende:

                bool tryAgain = false;
                do
                {
                    try
                    {
                        using (FileStream dstream = new FileStream(savePath, FileMode.Create))
                        {
                            thisbitmap.Save(dstream, ImageFormat.Bmp);
                            dstream.Close();
                        }
                        tryAgain = false;
                    }
                    catch
                    {
                        if (DialogResult.Yes = MessageBox.Show("Couldn't write file! TryAgain?", "Write Error!", MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1))
                            tryAgain = true;
                        else
                            tryAgain = false;
                    }
                }
                while (tryAgain);


Det forsøger at skrive mindst 1 gang, hvorefter brugeren får at vide, at skrivningen ikke kunne lade sig gøre og giver brugeren mulighed for at prøve igen. Hvis man vælger ikke at prøve igen eller hvis det lykkes at skrive, stopper loopet.
Avatar billede annxii Nybegynder
22. januar 2009 - 15:20 #4
sorry...der skal selvfølgelig dobbelt '=' mellem DialogResult og messagebox

if (DialogResult.Yes == MessageBox.Show("Couldn't write file! TryAgain?", "Write Error!", MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1))
    tryAgain = true;
else
    tryAgain = false;
Avatar billede glenn007 Nybegynder
22. januar 2009 - 16:32 #5
annxii  meget intresant løsning, jeg vil prøve at se på den.

Kan se det kræver jeg laver en pop up dialogbox i mit program, det har jeg ikke prøvet så meget af men ser om jeg kan hite ud af det
Avatar billede glenn007 Nybegynder
22. januar 2009 - 17:22 #6
annxii  kan man evt lave så den selv trykker okey hvis man ikke har trykket på den efter lad os sige 2 sekunder

har fået lavet det andet og det virker fint.
Avatar billede annxii Nybegynder
22. januar 2009 - 19:21 #7
Jeg tror det bliver noget rod med brugen af standard messagebox, men jeg ar fundet en, der har lavet en extension af messagebox med timeout.

http://www.codeproject.com/KB/miscctrl/CsMsgBoxTimeOut.aspx

Alt hvad du burde være nød til at gøre er, at udskifte messagebox'en med den her udvidet udgave, sætte dens timeout til det antal millisekunder du vil have den stående og ændre defaultbutton til Button2 (til "No")
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