Windows Explorer hängt an Drag & Drop von WinForms DataGridView ab
Posted: 06 May 2025, 09:09
Ich versuche, einen Datei-Explorer zu erstellen, der Drag & Drop-Funktionen hat und die Endbenutzer-Drag & Drop-Dateien von diesem benutzerdefinierten Datei-Explorer direkt zum Windows Explorer kopieren, um die ausgewählten Dateien zu kopieren. Letzterer hört auf, den Vorgang zu reagieren, und ich muss den Prozess manuell töten. Replizieren Sie es konsequent: Ich konnte dieses Verhalten nur ein paar Mal in einen leeren Ordner fallen lassen, aber wenn Sie die Dateien in einem Ordner fallen lassen, der bereits genau dieselben Dateien enthält, passiert es weitaus häufiger . Devexpress -Steuerelemente.
Code: Select all
private void MouseMove(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left && _draggingHitInfo != null) {
Size dragSize = SystemInformation.DragSize;
var dragRect = new Rectangle(new Point(_eventArgs.X - dragSize.Width / 2, _eventArgs.Y - dragSize.Height / 2), dragSize);
if (!dragRect.Contains(new Point(e.X, e.Y))) {
var selNodes = dataGridView1.SelectedRows;
var paths = new System.Collections.Specialized.StringCollection();
foreach (DataGridViewRow node in selNodes) {
string path = node.Cells[0].Value?.ToString();
if (File.Exists(path))
paths.Add(path);
}
if (paths.Count > 0) {
var dataObj = new DataObject();
dataObj.SetFileDropList(paths);
dataGridView1.DoDragDrop(dataObj, DragDropEffects.Copy);
}
_draggingHitInfo = null;
_eventArgs = null;
}
}
}
private void MouseDown(object sender, MouseEventArgs e) {
HitTestInfo hitInfo = dataGridView1.HitTest(e.X, e.Y);
if (hitInfo.Type == DataGridViewHitTestType.Cell || hitInfo.Type == DataGridViewHitTestType.RowHeader) {
_draggingHitInfo = hitInfo;
_eventArgs = e;
}
}
< /code>
Das Formular enthält eine einfache DataGridView mit einer einzelnen Spalte, die den Vollfilmnamen jeder Datei enthält, wie folgt: < /p>
private void Form1_Load(object sender, EventArgs e) {
// change the file paths to your location.
object[] data1 = new object[] { "C:\\Users\\talignanid\\Desktop\\SampleDragDrop\\SampleDragDrop\\files\\Divisore.bmp" };
object[] data2 = new object[] { "C:\\Users\\talignanid\\Desktop\\SampleDragDrop\\SampleDragDrop\\files\\Esploso.jpg" };
object[] data3 = new object[] { "C:\\Users\\talignanid\\Desktop\\SampleDragDrop\\SampleDragDrop\\files\\Offerta 1.xlsx" };
DataTable dt = new DataTable();
dt.Columns.Add("Filename");
dt.Rows.Add(data1);
dt.Rows.Add(data2);
dt.Rows.Add(data3);
dataGridView1.DataSource = dt;
}
< /code>
Ich habe versucht, den Prozessmonitor zu verwenden, um einen Fehler innerhalb des Explorers beim Löschen, aber ohne Erfolg zu fangen. Gleiches gilt für meine Bewerbung. Wenn Explorer nicht mehr reagiert, friert mein Programm offensichtlich auch ein. Das Töten des Explorer.exe -Prozesses weckt mein Programm auf, aber das gleiche geschieht nicht beim Töten meines Programms: Windows Explorer bleibt in diesem unerschütterlichen Zustand. Schließlich kann ich beim Neustarten von Explorer.exe sehen, dass die Dateien im Ordner korrekt kopiert werden. Das [url=viewtopic.php?t=20324]Problem[/url] muss also [b] nach [/b] die Kopie bereits abgeschlossen sein.
mache ich etwas falsches in meinem Code? Ist es ein bekanntes Problem? Gibt es eine Problemumgehung?*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
KEY_VALUES_STRING: 1
Key : Analysis.CPU.mSec
Value: 7921
Key : Analysis.Elapsed.mSec
Value: 10786
Key : Analysis.IO.Other.Mb
Value: 0
Key : Analysis.IO.Read.Mb
Value: 2
Key : Analysis.IO.Write.Mb
Value: 0
Key : Analysis.Init.CPU.mSec
Value: 1453
Key : Analysis.Init.Elapsed.mSec
Value: 444055
Key : Analysis.Memory.CommitPeak.Mb
Value: 518
Key : Analysis.Version.DbgEng
Value: 10.0.27829.1001
Key : Analysis.Version.Description
Value: 10.2503.24.01 amd64fre
Key : Analysis.Version.Ext
Value: 1.2503.24.1
Key : Failure.Bucket
Value: BREAKPOINT_80000003_win32u.dll!NtUserWaitMessage
Key : Failure.Exception.Code
Value: 0x80000003
Key : Failure.Hash
Value: {a106cd41-a8b1-c51d-6d94-a75661270841}
Key : Failure.ProblemClass.Primary
Value: BREAKPOINT
Key : Faulting.IP.Type
Value: Null
Key : Timeline.OS.Boot.DeltaSec
Value: 2486366
Key : Timeline.Process.Start.DeltaSec
Value: 1046
Key : WER.OS.Branch
Value: co_release
Key : WER.OS.Version
Value: 10.0.22000.1
Key : WER.Process.Version
Value: 6.2.22000.2538
FILE_IN_CAB: explorer.exe_250506_084542.dmp
COMMENT:
*** C:\Users\talignanid\Desktop\procdump.exe -h -ma explorer.exe
*** Hung window detected: 208be
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 0000000000000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
FAULTING_THREAD: d1d20
PROCESS_NAME: explorer.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {ERRORE DI EXCEPTION} Breakpoint stato raggiunto un breakpoint.
EXCEPTION_CODE_STR: 80000003
STACK_TEXT:
00000000`002ef588 00007ffb`3a6eda3c : 00000000`00844850 00000000`002ef740 00000000`0000029c 00000000`0000029c : win32u!NtUserWaitMessage+0x14
00000000`002ef590 00007ffb`3a6ed97d : 00000000`039cbd90 00000000`03a1bb10 00000000`00844850 00000000`0000029c : shell32!CDesktopBrowser::_MessageLoop+0x4c
00000000`002ef610 00007ff7`231f0e4f : 00000000`00000000 00000000`0000029e 00000000`00000000 00000000`0000029c : shell32!SHDesktopMessageLoop+0x3d
00000000`002ef640 00007ff7`232209c0 : 00000000`00000001 00000000`00000000 00000000`00000000 00000000`00000000 : explorer!wWinMain+0x817
00000000`002efa90 00007ffb`3a4153e0 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : explorer!__scrt_common_main_seh+0x110
00000000`002efad0 00007ffb`3ba2485b : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0x10
00000000`002efb00 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x2b
STACK_COMMAND: ~0s; .ecxr ; kb
SYMBOL_NAME: win32u!NtUserWaitMessage+14
MODULE_NAME: win32u
IMAGE_NAME: win32u.dll
FAILURE_BUCKET_ID: BREAKPOINT_80000003_win32u.dll!NtUserWaitMessage
OS_VERSION: 10.0.22000.1
BUILDLAB_STR: co_release
OSPLATFORM_TYPE: x64
OSNAME: Windows 10
IMAGE_VERSION: 6.2.22000.2538
FAILURE_ID_HASH: {a106cd41-a8b1-c51d-6d94-a75661270841}
Followup: MachineOwner
---------