private void RequestTreeImage(IntPtr handle) {
new Thread(() => {
Application.DoEvents();
Thread.Sleep(1);
TreeNode node = null;
IntPtr treeHandle = IntPtr.Zero;
var pidl = IntPtr.Zero;
var visible = false;
if (this.ShellTreeView != null) {
this.ShellTreeView.Invoke((Action)(() => {
try {
node = TreeNode.FromHandle(ShellTreeView, handle);
treeHandle = ShellTreeView.Handle;
if (node != null) {
visible = node.IsVisible;
var item = node.Tag as IListItemEx;
if (item != null) {
pidl = item.AbsolutePidl;
}
}
}
catch { }
}));
if (visible && pidl != IntPtr.Zero) {
var nodeHandle = handle;
Thread.Sleep(1);
Application.DoEvents();
SetNodeImage(nodeHandle, pidl, treeHandle, !(node.Parent != null && (node.Parent.Tag as IListItemEx).ParsingName == KnownFolders.Links.ParsingName));
}
}
}).Start();
}