powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Мусорщик сжирает курсор. Как лечить?
12 сообщений из 12, страница 1 из 1
Мусорщик сжирает курсор. Как лечить?
    #38781413
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу использовать кастом-курсор для сплиттера.

Собственно код, лучше не придумал:
Код: vbnet
1.
2.
3.
  Private Sub InitSplitter() 'в form_load
    SplitterMain.Cursor = New Cursor(My.Resources.VSplit.Handle)
  End Sub


VSplit -это иконка
Все хорошо, но курсор по истечении времени волшебным образом перестает появляться.
Как лечить?

засунуть в SplitterMain_MouseEnter ?
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38781673
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

предполагаю, должно помочь использование метода GC.KeepAlive, в который передаётся объект курсора. Вызов этого метода поместить в метод Dispose главной формы, или в обработчики закрытия формы: Form_Closing, Form_Closed (если они используются).
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782018
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik,

Вот так наверно,да?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Class Form1

  Dim SpliterCur As Cursor


Private Sub Form1_Load...
    SpliterCur = New Cursor(My.Resources.VSplit.Handle)
    SplitterMain.Cursor = SpliterCur
    GC.KeepAlive(SpliterCur)
...

 Private Sub Form1_FormClosed...
    SpliterCur.Dispose()
  End Sub



Пока не умер...


Кстати, с VSplit.Handle ничего делать не надо?
А то есть желание сделать ему DestroyIcon

P.S. Блин, соврал. Пока писал все это, курсор сдох.
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782069
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достало, пусть будет так:
Код: vbnet
1.
2.
3.
  Private Sub SplitterMain_MouseEnter(sender As Object, e As EventArgs) Handles SplitterMain.MouseEnter
    SplitterMain.Cursor = New Cursor(My.Resources.VSplit.Handle)
  End Sub

Нравится ему, пускай чистит все эти курсоры. За время дергания палки не успеет. Не так часто этот сплиттер дергают.
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782131
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Class Form1

  Dim SpliterCur As Cursor


Private Sub Form1_Load...
    SpliterCur = New Cursor(My.Resources.VSplit.Handle)
    SplitterMain.Cursor = SpliterCur
...

 Private Sub Form1_FormClosed...
        GC.KeepAlive(SpliterCur)
  End Sub
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782229
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikПримерно так:
Код: vbnet
1.
2.
3.
4.
...
  Private Sub Form1_FormClosed...
        GC.KeepAlive(SpliterCur)
  End Sub


Нет, это не помогает. Это первое что я сделал глядя на ваш первый ответ.
Хотя из общих соображений это противоречит логике, т.к. до Form1_FormClosed никаких доп. манипуляций с SpliterCur не делается.
Я так понимаю GC.KeepAlive(SpliterCur) это как раз команда "не убий", посему логично это вставлять сразу после создания курсора, т.е. код что я привел, а не ваш.

Если других советов не будет, то оставлю
Код: vbnet
1.
2.
3.
  Private Sub SplitterMain_MouseEnter(sender As Object, e As EventArgs) Handles SplitterMain.MouseEnter
    SplitterMain.Cursor = New Cursor(My.Resources.VSplit.Handle)
  End Sub


По крайне мере это работает и пусть этот мусорщик давится этими курсорами, не жалко. Раз так любит поедать все подряд.
Хотя в нормальном классическом коде я бы это себе не позволил? потому как курсор создается всякий раз New.
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782234
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Я так понимаю GC.KeepAlive(SpliterCur) это как раз команда "не убий",
хе-хе, вас обманули

авторСсылается на указанный объект, делая его недоступным для сборщика мусора с момента начала текущей процедуры до вызова этого метода.

http://msdn.microsoft.com/ru-ru/library/system.gc.keepalive(v=vs.110).aspx
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782243
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
>с момента начала текущей процедуры
ну и хорошо, как это применить?
Процедуры то разные
petalvik предлагает вызвать метод в _FormClosed, а создаю то я курсор в Form_Load
И это ясно дело не работает.

В примере из указанной статьи одна процедура.
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782244
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77ну и хорошо, как это применить?
это лекарство от другой болезни
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782248
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилэто лекарство от другой болезни
Ну хорошо, а в моем случае что делать? Заметь, код "честный", я нигде не использовал API.
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782260
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Заметь, код "честный", я нигде не использовал API.
а это что - Handle ?

My.Resources.VSplit если кто подметёт - курсор пропасть может
...
Рейтинг: 0 / 0
Мусорщик сжирает курсор. Как лечить?
    #38782407
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилMy.Resources.VSplit если кто подметёт - курсор пропасть может
Идею уловил.
Код: vbnet
1.
2.
3.
4.
5.
6.
Public Class Form1
  Dim SplitterCursorIcon As Icon

  Private Sub Form_Load...
    SplitterCursorIcon = My.Resources.VSplit
    SplitterMain.Cursor = New Cursor(SplitterCursorIcon.Handle)


Вроде больше не пропадает.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Мусорщик сжирает курсор. Как лечить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]