当我在某个线程中时,如何让UIthread执行命令
下面的代码由一个线程调用,但我想在UIthread中运行的行...如果我这样调用它就不起作用..
形式滞后一点,进程风扇变得像在无限循环中一样快...然后它给了我一个错误“stackoverflowexception”
我的应用程序是文件管理器..(复制,剪切,粘贴,新文件夹......等)..和 dirRecursive(字符串路径) ..显示listView中的文件和文件夹带有图标所以每当我做(新文件夹或粘贴)这样的事情时,我都必须调用 dirRecursive 来更新listView
注意:
请帮助:)提前感谢
private void PasteFromCopy(object dest)
{
foreach (ListViewItem item in copiedItems)
{
string _dest = (string)dest;
string itemName = item.Text;
string itemPath = item.ToolTipText;
string itemDest = Path.Combine(_dest, itemName);
if (IsFolder(itemPath))
{
if (Directory.Exists(itemDest))
{
if (MessageBox.Show(itemName + " is already exists .. Do you want to overwrite it and its all contents?"
, "Overwrite", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
{
CopyDirectory(itemPath, itemDest, true);
}
}
else
CopyDirectory(itemPath, itemDest, false);
}
else
{
if (File.Exists(itemDest))
{
if (MessageBox.Show(itemName + " is already exists .. Do you want to overwrite it?"
, "Overwrite", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
{
InfoLabel("Copying " + itemName + " ...");
File.Copy(itemPath, itemDest, true);
}
}
else
{
InfoLabel("Copying " + itemName + " ...");
File.Copy(itemPath, itemDest, false);
}
}
InfoLabel("Paste done.");
dirRecursive(currAddress); // here is line i need to execute from UIthread
}
}
答案 0 :(得分:2)
尝试替换此行
dirRecursive(currAddress);
带
if (InvokeRequired)
{
Action a = ()=>dirRecursive(currAddress);
Invoke(a);
}
这假设你使用的是WinForms而不是WPF,你还没有指定。另外' InvokeRequired'并且'调用'都是System.Windows.Forms.Control的成员,因此您的PasteFromCopy需要是表单上的方法。