C# 如何在backgroundworker C中填充treeview#
下面的代码使用JSONnet将JSON文件中的数据填充到名为treeView1的树视图中。如果我打开一个大的json文件,UI会在填充过程中挂起,那么我如何让backgroundworker中的所有事情都发生并显示一个用于填充进度的进度条呢?谢谢C# 如何在backgroundworker C中填充treeview#,c#,treeview,backgroundworker,populate,C#,Treeview,Backgroundworker,Populate,下面的代码使用JSONnet将JSON文件中的数据填充到名为treeView1的树视图中。如果我打开一个大的json文件,UI会在填充过程中挂起,那么我如何让backgroundworker中的所有事情都发生并显示一个用于填充进度的进度条呢?谢谢 private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog()
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.Filter = "All files (*.*)|*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string jsonfile = File.ReadAllText(openFileDialog1.FileName);
try
{
var jsondata = JObject.Parse(jsonfile);
treeView1.Nodes.Clear();
AddObjectNodes(jsondata, "DATA", treeView1.Nodes);
}
catch (Exception)
{
MessageBox.Show("Invalid JSON");
}
}
}
private void AddObjectNodes(JObject @object, string name, TreeNodeCollection parent)
{
var node = new TreeNode(name);
parent.Add(node);
foreach (var property in @object.Properties())
{
AddTokenNodes(property.Value, property.Name, node.Nodes);
}
}
private void AddArrayNodes(JArray array, string name, TreeNodeCollection parent)
{
var node = new TreeNode(name);
parent.Add(node);
for (var i = 0; i < array.Count; i++)
{
AddTokenNodes(array[i], string.Format("[{0}]", i), node.Nodes);
}
}
private void AddTokenNodes(JToken token, string name, TreeNodeCollection parent)
{
if (token is JValue)
{
parent.Add(new TreeNode(string.Format("{0}: {1}", name, ((JValue)token).Value)));
}
else if (token is JArray)
{
AddArrayNodes((JArray)token, name, parent);
}
else if (token is JObject)
{
AddObjectNodes((JObject)token, name, parent);
}
}
private void按钮1\u单击(对象发送者,事件参数e)
{
OpenFileDialog openFileDialog1=新建OpenFileDialog();
openFileDialog1.InitialDirectory=“c:\\”;
openFileDialog1.Filter=“所有文件(*.*)|*.*”;
openFileDialog1.FilterIndex=1;
openFileDialog1.RestoreDirectory=true;
如果(openFileDialog1.ShowDialog()==DialogResult.OK)
{
字符串jsonfile=File.ReadAllText(openFileDialog1.FileName);
尝试
{
var jsondata=JObject.Parse(jsonfile);
treeView1.Nodes.Clear();
AddObjectNodes(jsondata,“DATA”,treeView1.Nodes);
}
捕获(例外)
{
Show(“无效的JSON”);
}
}
}
私有void AddObjectNodes(JObject@object,字符串名,TreeNodeCollection父节点)
{
var节点=新树节点(名称);
添加(节点);
foreach(@object.Properties()中的var属性)
{
AddTokenNodes(property.Value、property.Name、node.Nodes);
}
}
私有void AddArrayNodes(JArray数组、字符串名称、TreeNodeCollection父级)
{
var节点=新树节点(名称);
添加(节点);
对于(var i=0;i
在这里询问之前,您是否搜索过?非常确定这是一个非常常见的问题…所以你提到了BackgroundWorker…对它做一些研究,以及如何使用它…其他选项是System.Threading.Thread或System.Threading.Task。另外请记住,如果要从BackgroupWorker/Thread/Task中更新TreeView,则需要调用控件,例如TreeView。在向树中添加节点的每个循环之前和之后,也要应用BeginUpdate和EndUpdate方法,以加快更新速度。@SuperOli,如果没有人发布这样的帖子,你怎么能指望谷歌能获得搜索信息呢?