(Основная) проблема связана с вашим bw_ProgressChanged. Не нужно ничего вызывать, потому что задача Bgw - синхронизировать ProgressChanged. Я не делаю больно, но все равно теряю Призыв.
Причина, по которой вы не видите никаких изменений, заключается в отсутствии обновления ().
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
object[] args = e.UserState as object[];
TreeListNode parentNode = args[0] as TreeListNode;
string percentMsg = args[1].ToString(); //node: n/n message
parentNode.Nodes[0].SetValue(0, percentMsg); //change "Loading.." to "node: n/n"
parentNode.TreeView.Update(); // or Form.Update
}
В bw_DoWork () есть еще одна проблема: вы используете Invoke для метода AddSubNodes (). В результате 99% вашего кода полностью выполняется в основном потоке, а ваше решение вообще не является многопоточным.
Я бы сделал что-то вроде:
//untested
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
// t.Invoke(new MethodInvoker( () => AddSubNodes(e.Argument) ));
object[] args = arg as object[];
TreeListNode parentNode = e;
var newNodes = new List<TreeNode>();
int nodeCount = 10;
for (int i = 0; i < nodeCount; i++)
{
// t.AppendNode(new object[] { "node cell text" }, parentNode);
newNodes.Add(new object[] { "node cell text" }); // ???
bw.ReportProgress(i, new object[]{ parentNode, "node: " + i.ToString() + "/" + nodeCount.ToString()});
}
// e.Result = e.Argument;
e.Result = newNodes;
}
А затем в bw_RunWorkerCompleted быстро добавьте элементы newNode в 't'.