Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: В GDI+ возникла ошибка общего вида
     
    
Добавлено: 10.03.11 17:50
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 DLF
      
       
  
Подскажите, что делаю не так!
 
    
На форме содержится Timer1(100мсек), ImageList1(2 иконки 16х16х32), NotifyIcon1.
Код работает, но после 5-6 минутной работы вылетает ошибка:
System.Runtime.InteropServices.ExternalException не обработано
  ErrorCode=-2147467259
  Message=В GDI+ возникла ошибка общего вида.
  Source=System.Drawing
    Dim c As Integer = 0
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If IsKeyLocked(Keys.CapsLock) = True Then
            NotifyIcon1.Icon = Icon.FromHandle(CType(ImageList1.Images(c), Bitmap).GetHicon())
            If c <> 1 Then
                c = +1
            Else
                c = 0
            End If
        Else
            NotifyIcon1.Icon = Icon.FromHandle(CType(ImageList1.Images(1), Bitmap).GetHicon())
        End If
    End Sub
End Class
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 14
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 AgentFire
![]()
![]()
![]()
ICQ: 192496851 
Вопросов: 75
Ответов: 3178
      
 Профиль |  | #1
       
Добавлено:  11.03.11 00:58
       
    
       
  
как минимум, ты не освобождаешь ресурсы свежсозданной иконки. Каждые 100 мс.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #2
       
Добавлено:  11.03.11 01:03
       
    
       
  
Большой утечки не будет, так как сборщик мусора все равно будет находить потерявшиеся объекты, финализировать, а в финализаторе у них стоит вызов Dispose.
 
    
Другой вопрос, что мешает создать заранее 2 объекта Icon и в таймере подставлять то один то другой?
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 DLF
![]()
![]()
![]()
![]()
![]()
Вопросов: 9
Ответов: 53
      
 Профиль |  | #3
       
Добавлено:  11.03.11 03:25
       
    
       
  
Мне нужно, чтобы при включенном CapsLock иконка меняла свой цвет (2 иконки с разным задним фоном, которые должны содержаться в ресурсах файла, а не в папке с программой). ImageList для этого вполне подходит (тем более, что я его использую для остальной части кода).
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #4
       
Добавлено:  11.03.11 17:16
       
    
       
  
Нет необходимости каждый раз создавать иконку из данных в ImageList, достаточно сделать заране из ImageList создать 2 нужных тебе иконки, затем менять их в таймере. Кол-во операций с GDI сильно уменьшится, вероятно, ошибка тоже пропадет. Память тоже менее активно будет использоваться.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 DLF
![]()
![]()
![]()
![]()
![]()
Вопросов: 9
Ответов: 53
      
 Профиль |  | #5
       
Добавлено:  11.03.11 21:04
       
    
       
  
Был у меня перерыв в изучении программирования 2 года. Теперь начинаю всё с начала. Если не трудно, приведи пример. Наверно клёпки в голове не хватает.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Захарка
![]()
![]()
![]()
![]()
Вопросов: 0
Ответов: 42
      
 Профиль |  | #6
       
Добавлено:  12.03.11 02:43
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 Захарка
![]()
![]()
![]()
![]()
Вопросов: 0
Ответов: 42
      
 Профиль |  | #7
       
Добавлено:  12.03.11 02:45
       
    
       
  
ой, сорри не подумал:
 
    
сразу не понял зачем c нужно(
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа:
 DLF
![]()
![]()
![]()
![]()
![]()
Вопросов: 9
Ответов: 53
      
 Профиль |  | #8
       
Добавлено:  12.03.11 11:44
       
    
       
  
Спасибо, но до этого и я бы додумался бы. Мне нужно, чтобы иконка мигала при включенном CapsLock, а у NtifyIcon свойство Icon не индексируется. Вот в чем проблема.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #9
       
Добавлено:  12.03.11 17:13
       
    
       
  
здесь нужно добавить еще 4 строчки кода.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа:
 DLF
![]()
![]()
![]()
![]()
![]()
Вопросов: 9
Ответов: 53
      
 Профиль |  | #10
       
Добавлено:  13.03.11 13:20
       
    
       
  
?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа:
 AgentFire
![]()
![]()
![]()
ICQ: 192496851 
Вопросов: 75
Ответов: 3178
      
 Профиль |  | #11
       
Добавлено:  13.03.11 16:19
       
    
       
  
какие же, Артем
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #12
       
Добавлено:  14.03.11 05:52
       
    
       
  
Это вопрос на 64 000 рублей!
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа:
 AgentFire
![]()
![]()
![]()
ICQ: 192496851 
Вопросов: 75
Ответов: 3178
      
 Профиль |  | #13
       
Добавлено:  14.03.11 10:06
       
    
       
  
 
    
здесь нужно добавить еще 4 строчки кода. 
Полагаю, что эти?
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа:
 DLF
![]()
![]()
![]()
![]()
![]()
Вопросов: 9
Ответов: 53
      
 Профиль |  | #14
       
Добавлено:  18.03.11 20:17
       
    
       
  
Не думаю...