Frage

verengte Ive dieser Methode nach unten, aber ich verstehe nicht, warum seine die Datei sperren. Ich glaube, dass Sie so etwas wie

verwenden könnten
using( something)
{

//do stuff here
}

Aber ich bin sicher nicht, dass das A) das Problem lösen oder B) der richtige Weg, wenn es so wäre.

irgendwelche Ideen?

[DllImport("user32.dll", CharSet = CharSet.Auto)]private static extern Int32 SystemParametersInfo(UInt32 action, UInt32 uParam, String vParam, UInt32 winIni);  
    private static readonly UInt32 SPI_SETDESKWALLPAPER  = 0x14;  
    private static readonly UInt32 SPIF_UPDATEINIFILE    = 0x01;  
    private static readonly UInt32 SPIF_SENDWININICHANGE = 0x02;  

    private void SetWallpaper(string path)
    {
        try
        {
            Image imgInFile = Image.FromFile(path);
            imgInFile.Save(SaveFile, ImageFormat.Bmp);
            SystemParametersInfo(SPI_SETDESKWALLPAPER, 3, SaveFile, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
        }
        catch
        {
            MessageBox.Show("error in setting the wallpaper");
        }
    }
#

Aktualisiert Code

 private void SetWallpaper(string path)
    {
        if (File.Exists(path))
        {
            Image imgInFile = Image.FromFile(path);
            try
            {
                imgInFile.Save(SaveFile, ImageFormat.Bmp);
                SystemParametersInfo(SPI_SETDESKWALLPAPER, 3, SaveFile, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
            }
            catch
            {
                MessageBox.Show("error in setting the wallpaper");
            }
            finally
            {
                imgInFile.Dispose();
            }
        }
    }
War es hilfreich?

Lösung

MSDN : „Die Datei, bis das Bild bleibt gesperrt angeordnet ist.“ - also ja, sollte dies durch festgesetzt:

using (Image imgInFile ...) { ... }

(Als Randbemerkung, würde ich den Versuch fängt nur die .Save () und / oder Systemparameter () ruft anziehen)

Andere Tipps

Wenn Sie aus dem Pass mit Block, werden alle Objekte innerhalb dieses initialisiert angeordnet. In Ihrem Fall werden die Objekte angeordnet, die die Sperre der Datei entfernen.

Sie müssen manuell entsorgen (entweder durch eine mit Erklärung oder durch den Aufruf .Dispose () auf dem Objekt) alle nicht verwalteten Anrufe entweder COM oder Windows-API-Funktionen (dh wenn Sie Interop).

Hier ist, was ich habe lass es mich wissen, wenn Sie etwas sehen, dass ich ziemlich hoch. Aber es ist wie ein Weltmeister arbeiten, so dass ich ziemlich glücklich bin.

                private void SetWallpaper(string path)
                {
                    if (File.Exists(path))
                    {
                        Image imgInFile = Image.FromFile(path);
                        try
                        {
                            imgInFile.Save(SaveFile, ImageFormat.Bmp);
                            SystemParametersInfo(SPI_SETDESKWALLPAPER, 3, SaveFile, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
                        }
                        catch
                        {
                            MessageBox.Show("error in setting the wallpaper");
                        }
                        finally
                        {
                            imgInFile.Dispose();
                        }
                    }

                    Else
                    {
                          messagebox.show("Error with path: "+path+" Not found or in use");
                    }
                }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top