为什么这个线程方法需要900毫秒才能完成? [英] Why does this threaded method take 900 milliseconds to complete?
本文介绍了为什么这个线程方法需要900毫秒才能完成?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
私人无效Form1_Load的(对象发件人,发送System.EventArgs)
{
StartToFillTree();
}
私人无效StartToFillTree()
{
尝试
{
tvFolders.Nodes.Clear();
tvFolders.Nodes.Add(新的TreeNode(加载,-1,-1));
螺纹explorerThread =新主题(新的ThreadStart(FillTreeInAnotherThread));
explorerThread.Start();
}
赶上(例外EXC)
{
//做抓
}
}
私人无效FillTreeInAnotherThread()
{
尝试
{
CreateTree(this.tvFolders);
}
赶上(例外EXC)
{
//做抓
}
}
公共无效ClearTreeview(TreeView控件电视)
{
tv.Nodes.Clear();
}
公共无效AddNodeToTreeview(TreeView的电视,树节点的节点)
{
tv.Nodes.Add(节点);
}
公共无效CreateTree(树视图树视图)
{
尝试
{
树节点hoofdNode =新树节点(NodeNam,0,0);
AddDrivesToHoofdNode(hoofdNode); //此方法需要1毫秒
//这部分需要905毫秒,如果我能相信我的探查!! ?? -----
如果(treeView.InvokeRequired)
{
treeView.Invoke(新ClearTreeviewDelegate(this.ClearTreeview),新的对象[] {TreeView控件});
treeView.Invoke(新AddNodeToTreeviewDelegate(this.AddNodeToTreeview),新的对象[] {树视图,hoofdNode});
}
其他
{
treeView.Nodes.Clear();
treeView.Nodes.Add(hoofdNode);
}
//的900毫秒部分结束? -----
AddFavorieteFolders(树视图); //此方法需要1毫秒
}
赶上(例外前)
{
//做一些追赶
}
}
解决方案
首先,你为什么要使用线程的东西容易吗?看起来有点过度设计。但你也许不是我们展示的一切吗?
另外包装的TreeView控件修改:
treeView.BeginUpdate();
//这里修改树。
treeView.EndUpdate();
要获得更好的性能。
private void Form1_Load(object sender, System.EventArgs e)
{
StartToFillTree();
}
private void StartToFillTree( )
{
try
{
tvFolders.Nodes.Clear();
tvFolders.Nodes.Add( new TreeNode("Loading", -1, -1) );
Thread explorerThread = new Thread( new ThreadStart( FillTreeInAnotherThread ) );
explorerThread.Start();
}
catch (Exception exc)
{
//Do the catch
}
}
private void FillTreeInAnotherThread()
{
try
{
CreateTree(this.tvFolders);
}
catch (Exception exc)
{
//Do the catch
}
}
public void ClearTreeview( TreeView tv )
{
tv.Nodes.Clear();
}
public void AddNodeToTreeview( TreeView tv, TreeNode node )
{
tv.Nodes.Add( node );
}
public void CreateTree(TreeView treeView)
{
try
{
TreeNode hoofdNode = new TreeNode( "NodeNam", 0, 0);
AddDrivesToHoofdNode(hoofdNode); //This method takes 1 ms
//This part takes 905 milliseconds if I can believe my profiler !!?? -----
if( treeView.InvokeRequired )
{
treeView.Invoke( new ClearTreeviewDelegate( this.ClearTreeview ), new object[] { treeView } );
treeView.Invoke( new AddNodeToTreeviewDelegate( this.AddNodeToTreeview ), new object[] { treeView, hoofdNode } );
}
else
{
treeView.Nodes.Clear();
treeView.Nodes.Add(hoofdNode);
}
//End of 900ms part ?? -----
AddFavorieteFolders(treeView);//This method takes 1 ms
}
catch (Exception ex)
{
//Do some catching
}
}
解决方案
First of all, why are you using threads for something that easy? Looks a bit over-designed. But you are maybe not showing us everything?
Also wrap the TreeView modifications with:
treeView.BeginUpdate();
// modify the tree here.
treeView.EndUpdate();
To get better performance.
这篇关于为什么这个线程方法需要900毫秒才能完成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文