要实现的更能:例:我有一个树形结构:
01
01001
01001001
这么个结构;我想利用一个线程读取数据,一个线程以树形机构显示; 读取方法利用递归实现,问题就出在,我将读取方法新建线程 托管, 美读取一次 ,主线程显示一次;
如果是两级 很好实现 方法如下:
private void tlMedNameView()
{
List<String> mdType = SellFactory.GetSetupService().getAllMdType();
for (int i = 0; i < mdType.Count; i++)
{
int x = AddNode(mdType[i], -1);
this.tlMedName.Nodes[i].ImageIndex = 0;
List<String> medName = SellFactory.GetSetupService().getMedicineNameByType(mdType[i]);
Thread.Sleep(20);
for (int j = 0; j < medName.Count; j++)
{
AddNode(medName[j], x);
this.tlMedName.Nodes[i].Nodes[j].ImageIndex = 1;
Thread.Sleep(10);
}
}
} private int AddNode(String text, int id)
{
if (this.tlMedName.InvokeRequired)
{
AddNoedCallBack d = new AddNoedCallBack(this.AddNode);
return (int)this.Invoke(d, new object[] { text, id });
}
else
{
TreeListNode node = this.tlMedName.AppendNode(new object[] { text }, id);
return node.Id;
} }
问题 是如果是多级 我该怎么处理!!!!! 请高手指点
01
01001
01001001
这么个结构;我想利用一个线程读取数据,一个线程以树形机构显示; 读取方法利用递归实现,问题就出在,我将读取方法新建线程 托管, 美读取一次 ,主线程显示一次;
如果是两级 很好实现 方法如下:
private void tlMedNameView()
{
List<String> mdType = SellFactory.GetSetupService().getAllMdType();
for (int i = 0; i < mdType.Count; i++)
{
int x = AddNode(mdType[i], -1);
this.tlMedName.Nodes[i].ImageIndex = 0;
List<String> medName = SellFactory.GetSetupService().getMedicineNameByType(mdType[i]);
Thread.Sleep(20);
for (int j = 0; j < medName.Count; j++)
{
AddNode(medName[j], x);
this.tlMedName.Nodes[i].Nodes[j].ImageIndex = 1;
Thread.Sleep(10);
}
}
} private int AddNode(String text, int id)
{
if (this.tlMedName.InvokeRequired)
{
AddNoedCallBack d = new AddNoedCallBack(this.AddNode);
return (int)this.Invoke(d, new object[] { text, id });
}
else
{
TreeListNode node = this.tlMedName.AppendNode(new object[] { text }, id);
return node.Id;
} }
问题 是如果是多级 我该怎么处理!!!!! 请高手指点
读取线程每次在树中增加一个节点,就 intMark ++;
显示线程放到一个Timer里,当发现 intMark 不为0,则读取树,显示。并将 intMark 设为0。
这种方法没玩过,要当心脏读幻读什么的,自己去试吧。