Winform Control.Refresh - гарантаваны сінхронны?

Выклік WinForms Control.Refresh метад апісаны ў MSDN, як:

<�Я> Прымусовая кантроль несапраўдным сваю кліенцкую вобласць і неадкладна перамалёўвае сябе і ўсе даччыныя элементы кіравання.

Я адладка перарывістай праблемы, якая, здаецца, адбываецца, калі падлучаны дысплей перамыкаецца scanout сігналаў (эфектыўнае змена дазволу), у якім Control.Refresh па-відаць, не можа быць генерацыі чаканага выкліку Control.OnPaint. Я инструментирование прыкладання, каб атрымаць больш інфармацыі, тым не менш мне вельмі цікава, калі гэта можа быць на самой справе выконваючым рашэннем не выклікаць OnPaint, паколькі ён выяўляе дысплей маментальна гасіцца.

Гэта здаецца малаверагодным мне, і я чакаю, што я знайду іншы гарачы пісталет, але я адпраўляю на авось хтосьці бачылі гэта ў дзікай прыродзе, і маюць некаторыя рэкамендацыі для апрацоўкі гэтага.

1

1 адказы

Не, гэта не гарантавана. Калі элемент кіравання не мае экрана, каб маляваць далей, ён не будзе спрацоўваць паведамленне фарбы.

Але як толькі кіраванне на экране зноў, паведамленне фарбы павінна страляць зноў.

Вы спрабуеце намаляваць адладкавую інфармацыю? Калі элемент кіравання не адлюстроўваецца на экране, то, што вы чакаеце адбудзецца, калі вы тэлефануеце абнаўлення?

1
дададзена
@holtavolt Я проста паспрабаваў яго, каб пераканацца, але таймер нічога іншага з падзеяй фарбы не рабіць, калі кантроль закадравы. OnMove, вядома, але не фарба.
дададзена аўтар LarsTech, крыніца
@holtavolt Ды я і не спрацоўваюць OnPaint. Незалежна ад таго, вы спрабуеце зрабіць, вы, верагодна, не варта класці логіку ў выпадку фарбы.
дададзена аўтар LarsTech, крыніца
@holtavolt Для вашых мэтаў тэставання, я не думаю, што вы павінны рухацца форму «назад» на экран. Вось мае змены: pastebin.com/qkw9gcvH .
дададзена аўтар LarsTech, крыніца
Дзякуй - я прыдумаў некалькі эксперыментаў, каб паспрабаваць і пацвердзіць гэта, але яны мне далі супярэчлівыя вынікі. Я зрабіў простую форму, у якой OnMove піша суцяшаць, і выстрэльвае Refresh. Як вы апісваеце, у той час як форма на экране я бачу Refresh (і наступны OnPaint) агонь. Калі перанесьці яго закадравы (выкарыстоўваючы верхні левы клавішы са стрэлкамі і перасоўванне) - Абнаўляць спыняе стральбу, пакуль нейкая частка формы не знаходзіцца на экране зноў. Тым не менш, калі я ствараю таймер і ён змяніць размяшчэнне Формы такім чынам, што яна пракручваецца налева ад майго экрана, I <�я> зрабіць </я> атрымаць OnMove/OnPaint падзея.
дададзена аўтар holtavolt, крыніца
У вас ёсць свой OnMove якая выконвае Refresh ()? Я раблю, што выклікае OnPaint ў агонь, нават калі кантроль закадравы.
дададзена аўтар holtavolt, крыніца
Што мы па-іншаму рабіць? Гэта заўсёды абпал OnPaint: pastebin.com/Jc6hnVef - Я згодны з логікай фарбы падзей.
дададзена аўтар holtavolt, крыніца
Каранёвая прычына апынулася больш глыбокай асновай праблема з нашай рэалізацыяй каманды. Ваш першапачатковы адказ, што фарба не гарантуецца правільная, маркіроўка як такой.
дададзена аўтар holtavolt, крыніца