bla

"A very interesting bug", oder: Der kaputte DateTimePicker unter Windows 64bit

Donnerstag, 28.4.2016, 12:53 > da]v[ax

Screenshot_160428_12-45-28Himmel hilf! Gestern Nachmittag wollte ich das ValueChanged()-Event eines DateTimePickers debuggen. Zwar sprang der Debugger am Breakpoint an, aber dann hängte sich Visual Studio auf. Und nicht nur das: auch sämtliche anderen Programme (Outlook, Lync, Explorer, die Windows-Taskleiste usw.) verweigerten die Mitarbeit und zwar genau so lange, bis ich VS hart abgeschossen hatte. Was ich jeweils 2x machen musste, weil auch das Fenster hier rechts eingefroren war.

Ich machte mich also auf die Suche und probierte diverse mehr oder weniger esoterische Lösungsvorschläge aus.

Stunden später.

Das Problem ist tatsächlich ein Problem des DateTimePickers:

Von Microsoft am
16.06.2015 um 16:39 bereitgestellt
Hi,

Thank you for your report. This is a very interesting bug. The DateTimePicker control installs a mouse hook as part of its functionality, but when the debugger has the WinForms application stopped on a breakpoint, it allows the possibility of a deadlock if VS happens to get a mouse message. For now, the deadlock is unfortunately a consequence of the DateTimePicker's design. The mouse hook is installed when the drop down is clicked to display the calendar. This means that breakpoints should not be sent in any event handlers which would be called while the calendar is active. We are currently investigating whether it is possible to address this issue and we will update this thread with further information if we are able to make a fix available.

Natürlich kam da nie eine Antwort geschweige denn ein Fix dazu. Wer debuggt schon ein ValueChanged-Event eines DateTimePickers? Nur daMax. Grmbl.

Zum Glück hat ein anderer gestresster findiger Coder einen Workaround gefunden:

Dies tritt nur auf, wenn als Zielplattform des Projekts „AnyCpu“ oder „64 Bit“ angegeben wurde. Sobald „32 Bit“ verwendet wurde kann der Debugger wie gewohnt verwendet werden.

In unserem Fall bedeutet das, dass wir für Debug-Session den 32-Bit-Modus verwenden, das Projekt aber nach wie vor mit AnyCpu bzw. 64-Bit ausliefern. Zufriedenstellend ist es nicht, aber es gibt keine andere Lösung.

A day wasted.

PS: warum ich das überhaupt Debuggen wollte, fragt ihr? Nun.

Ein DTP kann normalerweise nicht "leer" sein, hat also immer einen Wert. Nun haben wir hier aber den Fall, dass der DTP erstmal "leer" sein soll, so dass der Anwender gezwungen wird, aktiv einen Wert zu wählen. Das geht, indem man dem DTP ein einzelnes Space als CustomFormat verpasst:

If param.Value Is Nothing Then
dtp.CustomFormat = " "
Else
'something
End If

nun muss im ValueChanged-Event aber der "richtige" CustomFormat-String gesetzt werden, sonst bleibt der DTP immer leer:

Sub OnDTPValueChanged(sender As Object, e As EventArgs)
Dim dtp as DateTimePicker = DirectCast(sender, DateTimePicker)
dtp.CustomFormat = "yyyyMMdd"
End Sub

Naja, und da ich auch noch je nach Art des per DataBinding an den DTP gebundenen Objekts einen anderen CustomFormat-String einstellen wollte, wollte ich eben mal einen Breakpoint in diesem EventHandler haben um zu gucken, was ich da so machen könnte.

.net | visual studio | crash | freezes | hangs | hängt

Antworten

Dein Kommentar

Das Kleingedruckte:
Halte Dich bitte an die Spielregeln. Welche Emoticons du verwenden kannst, steht hier. Kommentarabonnements werden automatisch nach 3 Monaten gelöscht.
 
 Wer HTML kann, ist klar im Vorteil. Diese Tags sind erlaubt:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
 
 Bei der Menge an Spam-Kommentaren passiert es hin und wieder, dass ein Kommentar vom Spamfilter gefressen wird. Bitte sei mir nicht böse aber ich habe weder Zeit noch Lust, solch verloren gegangenen Kommentaren hinterher zu forschen. Wenn das öfters passiert, schreib' mir 'ne Mail damit ich dich whitelisten kann.

OOPS!

Es sieht so aus, als hättest du keinen Werbeblocker installiert. Das ist schlecht für dein Gehirn und manchmal auch für deinen Computer.

Bitte besuche eine der folgenden Seiten und installiere dir einen AdBlocker deiner Wahl, danach kannst du todamax wieder ohne Einschränkungen genießen.


uBlock Origin: für Chrome | Firefox | Safari

AdGuard: für Chrome | Firefox | Safari | Opera | Yandex

AdBlock Plus: für Chrome | Firefox | Safari | Opera | Internet Explorer

uMatrix: für Firefox | Chrome | Opera

Ey, lass mich einfach rein, okay?
(Setzt per Javascript einen Cookie. Wenn Du das alles deaktiviert hast, weiß ich auch nicht, wie ich dir helfen soll)

Ich will das hier nie wieder sehen.
(Setzt per Javascript einen sehr langlebigen Cookie. Wenn Du das alles deaktiviert hast oder Cookies automatisch oder auch von Hand löschst, weiß ich auch nicht, wie ich dir helfen soll)

Ihr Browser versucht gerade eine Seite aus dem sogenannten Internet auszudrucken. Das Internet ist ein weltweites Netzwerk von Computern, das den Menschen ganz neue Möglichkeiten der Kommunikation bietet.

Da Politiker im Regelfall von neuen Dingen nichts verstehen, halten wir es für notwendig, sie davor zu schützen. Dies ist im beidseitigen Interesse, da unnötige Angstzustände bei ihnen verhindert werden, ebenso wie es uns vor profilierungs- und machtsüchtigen Politikern schützt.

Sollten Sie der Meinung sein, dass Sie diese Internetseite dennoch sehen sollten, so können Sie jederzeit durch normalen Gebrauch eines Internetbrowsers darauf zugreifen. Dazu sind aber minimale Computerkenntnisse erforderlich. Sollten Sie diese nicht haben, vergessen Sie einfach dieses Internet und lassen uns in Ruhe.

Die Umgehung dieser Ausdrucksperre ist nach §95a UrhG verboten.

Mehr Informationen unter www.politiker-stopp.de.