private void SetIDBox(FeatureData feature, string data, float[] fea, Image img) { //InvokeRequired属性需要比较调用线程和创建线程的线程ID,如果俩线程ID不同,则返回true if (treeView1.InvokeRequired)//调用和创建该控件的线程是不同的线程,必须调用Invoke方法 { if (!closing) { //创建该方法的委托实例 SetIDback d = new SetIDback(SetIDBox); //调用该委托实例,并传递参数,参数为object类型,使用this调用Invoke(this为当前窗体,是创建该窗体控件的线程) Invoke(d, new object[] { feature, data, fea, img });//this指定创建该控件的线程来Invoke(调用) } } else//调用与创建该控件的线程是同一个线程 { if (closing) { return; } if (!string.IsNullOrEmpty(data)) { foreach (TreeNode node in treeView1.Nodes) { if (node.GetNodeCount(true) != 0) { if (feature.itemID == node.Text) { TreeNode treeNode = node; treeView1.SelectedNode = treeNode; treeView1.SelectedNode.Nodes.Add(data); facedata[node.Index].feavec.Add(fea); SetFaceBox(img, imageDir + "/" + facedata[node.Index].name + "/" + facedata[node.Index].feavec.Count); return; } } } TreeNode[] Data = new TreeNode[1]; Data[0] = new TreeNode(data); TreeNode ID = new TreeNode(feature.itemID, Data); treeView1.Nodes.Add(ID); treeView1.SelectedNode = ID; FaceData face = new FaceData(fea, feature.itemID); facedata.Add(face); if (!Directory.Exists(imageDir + "/" + feature.itemID)) { Directory.CreateDirectory(imageDir + "/" + feature.itemID); } SetFaceBox(img, imageDir + "/" + feature.itemID + "/" + facedata[facedata.Count - 1].feavec.Count); } } }
private void loadFaceData() { facedata = new List <FaceData>(); if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } if (!Directory.Exists(imageDir)) { Directory.CreateDirectory(imageDir); } if (File.Exists(filePath)) { using (StreamReader sr = new StreamReader(filePath, Encoding.Default)) { String line; FaceData face = new FaceData(); while ((line = sr.ReadLine()) != null) { String[] data = line.Split(' '); if (data[0] == "ID") { face.name = data[1]; } else if (data[0] == "end") { facedata.Add(face); face = new FaceData(); } else { float[] vec = new float[FaceApi.FeatureVecLen()]; for (int idx = 0; idx < vec.Length; ++idx) { vec[idx] = Convert.ToSingle(data[idx]); } face.feavec.Add(vec); } } } if (facedata.Count != 0) { foreach (FaceData face in facedata) { TreeNode[] nodes = new TreeNode[face.feavec.Count]; int idx = 0; foreach (float[] fea in face.feavec) { float sum = 0; foreach (float single in fea) { sum += single; } nodes[idx] = new TreeNode(sum + ""); idx += 1; } TreeNode treeNode = new TreeNode(face.name, nodes); treeView1.Nodes.Add(treeNode); } } } }