【发布时间】:2014-08-12 23:06:26
【问题描述】:
我处理用户点击按钮,例如:
private void btnScanDirectory_Click(object sender, EventArgs e)
{
// some code
}
btnScanDirectory_Click() 完成工作后会触发哪些事件?
我问的原因是,在btnScanDirectory_Click() 中,我创建了一个新的Thread(),我在其中“触发并忘记”tree.BeginInvoke() 方法来更新TreeView。
所以即使工作线程关闭,主线程仍在处理那些多个BeginInvoke() 调用,并且当我访问树时
tree.ExpandAll();
在同一个btnScanDirectory_Click() - 它没有效果。
我找不到“在调用所有 EndInvoke() 方法时在主线程中等待”的方法,所以我想在 after btnScanDirectory_Click() 触发的情况下尝试 tree.ExpandAll()结束了。
【问题讨论】:
-
当然它没有任何效果,树开始填充在您的 Click 处理程序完成之后。 ExpandAll() 必须仅在线程完成后调用。使用 BackgroundWorker 轻松完成。
-
@HansPassant 我只能使用
Thread()类...你能帮我在没有 BackgroundWorker 的情况下如何做到这一点吗? -
这是什么荒谬的约束?使用适当的工具来完成工作。
-
@HansPassant 感谢您为我的问题投票。干得好。
标签: c# .net multithreading winforms asynchronous