tratamiento sintomas primer prevencion lado izquierdo grave grado curar corazon como cardiaco bloqueo auriculoventricular anatomica .net graphics fonts gdi+ embedded-resource

.net - sintomas - bloqueo en el corazon tratamiento



La fuente incrustada causa un bloqueo (1)

Marshal.FreeCoTaskMem(FontPtr)

La documentación de MSDN para PrivateFontCollection es demasiado obtusa al respecto. Pero necesita mantener la memoria de la fuente añadida válida hasta que ya no pueda usar la fuente. O para decirlo de otra manera, AddMemoryFont () no hace una copia de la fuente. Por lo tanto, su programa se caerá con un misterioso error GDI + cuando intente acceder a los datos de la fuente y se sobreescribirá con otra asignación de memoria no administrada.

Mueva la llamada de FreeCoTaskMem () a un controlador de evento FormClosed. O no se moleste si al cerrar el formulario también finaliza su programa.

Tengo una aplicación WinForm. Estoy usando una fuente personalizada que está en mis recursos integrados.
Funciona al principio, pero luego hace que el programa se cuelgue después de un tiempo.
Usando el siguiente código como ejemplo, si sigo redimensionando el formulario, forzándolo a redibujarse constantemente, se bloqueará en unos pocos segundos. El mensaje que recibo es '' Error in ''Form1_Paint()''. Object is currently in use elsewhere. Error in ''Form1_Paint()''. Object is currently in use elsewhere. ''.
¿Qué estoy haciendo mal? ¿Cómo puedo evitar esto?
Tengo la fuente desde aquí.
Gracias.

Imports System.Drawing.Text Imports System.Runtime.InteropServices Public Class Form1 Friend Harabara As Font Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load LoadFonts() End Sub Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Try e.Graphics.DrawString("This was drawn using the custom font ''Harabara''", Harabara, Brushes.Lime, 10.0F, 10.0F) Catch ex As Exception MsgBox("Error in Form1_Paint()''" & vbCrLf & ex.Message) End Try End Sub Public Sub LoadFonts() Try Harabara = GetFontInstance(My.Resources.HarabaraHand, 24.0F, FontStyle.Italic) Catch ex As Exception MsgBox("Error in ''LoadFonts()''" & vbCrLf & ex.Message) End Try End Sub Private Function GetFontInstance(ByVal data() As Byte, ByVal Size As Single, ByVal Style As FontStyle) As Font Dim result As Font Try Dim pfc = New PrivateFontCollection ''LOAD MEMORY POINTER FOR FONT RESOURCE Dim FontPtr As System.IntPtr = Marshal.AllocCoTaskMem(data.Length) ''COPY THE DATA TO THE MEMORY LOCATION Marshal.Copy(data, 0, FontPtr, data.Length) ''LOAD THE MEMORY FONT INTO THE PRIVATE FONT COLLECTION pfc.AddMemoryFont(FontPtr, data.Length) ''FREE UNSAFE MEMORY Marshal.FreeCoTaskMem(FontPtr) result = New Font(pfc.Families(0), Size, Style) pfc.Families(0).Dispose() pfc.Dispose() Catch ex As Exception ''ERROR LOADING FONT. HANDLE EXCEPTION HERE MsgBox("Error in ''GetFontInstance()''" & vbCrLf & ex.Message) result = New Font(FontFamily.GenericMonospace, 8) End Try Return result End Function End Class