У меня есть таймер, который срабатывает каждые полсекунды. Он вызывает фоновый процесс, который отображает текст в виде значков и использует их для значков уведомлений.
Public Shared DISCUS(9) As NotifyIcon
Private Sub BackgroundProcess2_DoWork() Handles BackgroundProcess2.DoWork
Try
For counter As Integer = 0 To My.Computer.FileSystem.Drives.Count - 1
Dim FontColor As Color
If Math.Round((this / that) * 100, decimals:=0) < 25 Then
FontColor = Settings1.Default.CriticalColor
ElseIf Math.Round((this / that) * 100, decimals:=0) >= 25 And Math.Round((actualsize / ofsize) * 100, decimals:=0) < 50 Then
FontColor = Settings1.Default.WarningColor
Else
FontColor = Settings1.Default.NominalColor
End If
Dim BackColor As Color = Color.Transparent
Dim FontName As String = Settings1.Default.InterfaceFont.Name
Dim FontSize As Integer = 9
Dim iHeight As Integer = 16
Dim iWidth As Integer = 16
Dim objBitmap As New Bitmap(iWidth, iHeight)
Dim objGraphics As Graphics = Graphics.FromImage(objBitmap)
Dim objFont As New Font(FontName, FontSize)
Dim objPoint As New PointF(1, 0)
Dim objBrushForeColor As New SolidBrush(FontColor)
Dim objBrushBackColor As New SolidBrush(BackColor)
objGraphics.FillRectangle(objBrushBackColor, 0, 0, Width, Height)
objGraphics.DrawString(Text, objFont, objBrushForeColor, objPoint)
Dim img As Bitmap = objBitmap
Dim hIcon As IntPtr = img.GetHicon()
Dim icn As Icon = Icon.FromHandle(hIcon)
DISCUS(counter).Text = My.Computer.FileSystem.GetDriveInfo(My.Computer.FileSystem.Drives.Item(counter).ToString).VolumeLabel & vbCrLf & "Free space:" & vbCrLf & actualsize & stringvalue1 & " of " & ofsize & stringvalue2 & " (" & (Math.Round((this / that), decimals:=2) * 100) & "%)"
DISCUS(counter).BalloonTipText = Text
DISCUS(counter).Icon = icn
icn.Dispose()
DISCUS(counter).ContextMenuStrip = ContextMenuStrip1
Next
Catch ex as exception
My.Computer.FileSystem.WriteAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\DT crash log.txt", "Log: " & My.Computer.Clock.LocalTime.Date.ToString & vbCrLf & o.ToString & vbCrLf & vbCrLf, True)
End Try
End Sub
Теперь по какой-то причине, после нескольких минут активности приложения, я получаю всплывающее окно JIT, которое не отображает текст или кнопки. Нажатие на него приводит к сбою JIT-отладчика, и я получаю Windows "{App} перестал отвечать". с кодом ошибки CLR20R3. Я не уверен, что это все, но я могу предоставить любые другие детали, если это необходимо.
У меня есть все, что вложено в операторы Try / Catch, все с кодом для записи в журнал сбоев, но ничего не записывается, и я все еще получаю это сообщение об ошибке.
Может ли кто-нибудь дать мне указатели?