none
(0x80004005): Erro genérico de GDI+ RRS feed

  • Pergunta

  • Olá amigo(as),

    Eu estou escrevendo um programinha bem simples que monitora a temperatura do processador e exibe a temperatura a cada segundo no trayicon. A cada uma hora mais ou menos, o programa retorna erro e fecha:

    System.Runtime.InteropServices.ExternalException (0x80004005): Erro genérico de GDI+.
       em System.Drawing.Bitmap.GetHicon()
       em WindowsApplication7.Form1.Timer1_Tick(Object sender, EventArgs e)
       em System.Windows.Forms.Timer.OnTick(EventArgs e)
       em System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
       em System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    Segue o código:

    Dim btmp As Bitmap = New Bitmap(16, 16)
                Dim g As Graphics = Graphics.FromImage(btmp)
                g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
                Dim TempFont As Font = New Font("Arial", 9, FontStyle.Regular, GraphicsUnit.Point, 0)            
                If rodando Then
                    If nIconStat Then
                        Dim clrBackColor As Color = Color.FromArgb(255, 255, 0, 0)
                        g.Clear(clrBackColor)                    
                        g.DrawString(showCurrentTemp.Text, TempFont, Brushes.Yellow, 0, 1)
                    Else
                        Dim clrBackColor As Color = Color.FromArgb(255, 0, 0, 255)
                        g.Clear(clrBackColor)
                        g.DrawString(showCurrentTemp.Text, TempFont, Brushes.White, 0, 1)
                    End If
                Else
                    Dim clrBackColor As Color = Color.FromArgb(255, 255, 255, 0)
                    g.Clear(clrBackColor)                
                    g.DrawString(showCurrentTemp.Text, TempFont, Brushes.Blue, 0, 1)
                End If            
                NotifyIcon1.Icon = Icon.FromHandle(btmp.GetHicon())


    Pesquisando bastante, entendi que deveria usar o dispose pra liberar memória e adicionei estas linhas ao final:

     

    DestroyIcon(btmp.GetHicon()) 

    btmp.Dispose() 

    g.Dispose() 

    TempFont.Dispose() 

    NotifyIcon1.Icon.Dispose()


    E nada resolveu, continua dando o mesmo erro, alguém pode me ajudar?

    Grato desde já!


    quarta-feira, 9 de dezembro de 2015 23:10

Respostas

  • Bom dia,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Marcos SJ segunda-feira, 21 de dezembro de 2015 12:09
    segunda-feira, 21 de dezembro de 2015 12:09

Todas as Respostas

  • Boa noite, 

    Acredito ter encontrado a solução aqui:

    https://social.msdn.microsoft.com/Forums/pt-BR/e2c1df5d-6aaf-4c7b-b5d0-679dff8f9544/erro-genrico-de-gdi?forum=504

    Veja se ajuda em algo.

    quinta-feira, 10 de dezembro de 2015 01:16
  • Olá amigo, obrigado por responder.

    Então, nas minhas pesquisas pelo Google, já tinha visto esse post que mencionou e no caso dele, ele diz q tem problemas com a extensão da imagem GIF, o que não é o meu caso, já que o ícone é criado dinamicamente, cria-se um fundo de 16x16 e sobrepõe com uma fonte que mostra em números a temperatura atual.

    Lembrando que o programa ta rodando que é uma beleza, mas a cada uma hora mais ou menos ele apresenta este erro e sou forçado a fecha-lo.

    Mais uma vez grato pela atenção e esperando alguma ideia...



    quinta-feira, 10 de dezembro de 2015 13:42
  • Olá,

    Caso vc crie um imagem a partir de um jpg e a partir dela criar o grafico? dessa forma, só não tive tempo de testar:

    ' Create image.
        Dim imageFile As Image = Image.FromFile("SampImag.jpg")
    
        ' Create graphics object for alteration.
        Dim newGraphics As Graphics = Graphics.FromImage(imageFile)

    Alteraria muito o seu projeto? não facilitaria?

    abç

    quinta-feira, 10 de dezembro de 2015 17:42
  • Olá Don Medina,

    Eu tentei fazer da forma como citou e falhei miseravelmente quando ponho pra aparecer o texto mostrando os graus de temperatura no ícone da bandeja. Na verdade já havia tentado antes de desenhar dinamicamente.

    Por ser um programa particular, apenas pra estudo mesmo, não vou insistir muito. Fiz uma gambiarra fazendo com que qndo ele der erro, ele abra uma nova instancia e feche a antiga.

    Vou continuar pesquisando, caso encontre solução volto aqui com certeza pra postar o resultado e se alguém tiver uma ideia posta ae fazendo o favor :)

    Vlw a força Don, abraços.


    sábado, 12 de dezembro de 2015 01:35
  • Armando Augusto,

    Siga as instruções abaixo para ver se consegue resolver o problema:

    Destroy the icon

    <System.Runtime.InteropServices.DllImportAttribute("user32.dll")> _
        Private Shared Function DestroyIcon(ByVal handle _
     As IntPtr) As Boolean
        End Function
    
       Private Sub GetHicon_Example(ByVal e As PaintEventArgs)
           


    Create a Bitmap object from an image file.

    Dim myBitmap As New Bitmap("c:\FakePhoto.jpg")
          


    Draw myBitmap to the screen.

    e.Graphics.DrawImage(myBitmap, 0, 0)




    Get an Hicon for myBitmap.

    Dim HIcon As IntPtr = myBitmap.GetHicon()

    Create a new icon from the handle.

    Dim newIcon As Icon = System.Drawing.Icon.FromHandle(HIcon)

    Set the form Icon attribute to the new icon.

    Me.Icon = newIcon

    You can now destroy the icon, since the form creates its

    own copy of the icon accessible through the Form.Icon property.
     DestroyIcon(newIcon.Handle)
        End Sub

    https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.gethicon%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    Espero ter ajudado.

    Atenciosamente



    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    • Editado Marcos SJ quarta-feira, 16 de dezembro de 2015 12:50
    • Sugerido como Resposta Marcos SJ quarta-feira, 16 de dezembro de 2015 19:36
    quarta-feira, 16 de dezembro de 2015 12:49
  • Bom dia,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Marcos SJ segunda-feira, 21 de dezembro de 2015 12:09
    segunda-feira, 21 de dezembro de 2015 12:09