Layer.SetExpanded(true) creates duplicate group layer items in the Contents pane in ArcGIS Pro 2.8.x but works fine in ArcGIS Pro 2.7.x.
上次发布: October 13, 2021ArcGIS Pro SDK for .NET
漏洞 ID 编号
BUG-000143582
已提交
October 11, 2021
上次修改时间
June 19, 2025
适用范围
ArcGIS Pro SDK for .NET
找到的版本
2.8
操作系统
Windows OS
操作系统版本
10.0 64 Bit
状态
Will Not Be Addressed
开发团队已考虑过该问题或请求,并决定不会解决该问题。 问题的“其他信息”部分可能包含进一步说明。
附加信息
Here are a few changes that the submitter can make to remove potential deadlocks and the System.Threading.Tasks.Task. I do not recommend the approach being used in the repro. I cannot reproduce it with the code consolidated/refactored as below.
These changes/recommendations to the code are all explained here:
https://github.com/esri/arcgis-pro-sdk/wiki/ProConcepts-Asynchronous-Programming-in-ArcGIS-Pro
//Button1 implementation
protected async override void OnClick()
{
var loops = 20;
//we use a single queuedtask that is _awaited_ not "Wait"
//Class2_Add_Batch_Magic is implemented with synchronous
//methods
var N = await QueuedTask.Run(() =>
{
Class2_Add_Batch_Magic class2_Add_Batch_Magic = new Class2_Add_Batch_Magic();
return class2_Add_Batch_Magic.GO(loops);
});
//Show modal UI outside the context of the QTR
MessageBox.Show(String.Format("Complete {0} Loops, Duplicates = {1}", loops, N));
}
//Note that all methods are converted to synchronous
internal class Class2_Add_Batch_Magic
{
//The use of System.Threading.Tasks.Task is removed
public int GO(int loops = 20)
{
return Run(loops);
}
private int Run(int loops)
{
return TestLoop(loops);
}
//Must be called within the context of a QTR or a
//CalledOnWrongThreadException will be thrown from
//LayerFactory.Instance.CreateGroupLayer...
private int TestLoop(int loops)
{
int N = 0;
for (int i = 0; i < loops; i++)
{
N += Nest1(i);
}
return N;
//MessageBox.Show(String.Format("Complete {0} Loops, Duplicates = {1}", loops, N));
}
private int Nest1(int index)
{
int N = 0;
N = Nest2(index);
return N;
}
private int Nest2(int index)
{
int N = 0;
N = Make_Both(index);
return N;
}
private int Make_Both(int index)
{
var pMagic = MakeGroup("Magic_" + index, null);
var pBatch = MakeGroup("Batch_" + index, pMagic);
Layer_Visible(pBatch, false);
Layer_Expands(pBatch, false);
return pMagic.Layers.Count - 1;
}
private GroupLayer MakeGroup(string Name, GroupLayer Parent)
{
ILayerContainerEdit Group = Parent;
if (Group == null)
{
if (MapView.Active == null)
return null;
else
Group = MapView.Active?.Map;
}
Parent = LayerFactory.Instance.CreateGroupLayer(Group, 0, "A_" + Name + "_Z");
Parent.SetName(Name);
Layer_Expands(Parent, true);
Layer_Visible(Parent, true);
return Parent;
}
private void Layer_Expands(Layer pLayer, bool Value)
{
pLayer.SetExpanded(Value);
}
private void Layer_Visible(Layer pLayer, bool Value)
{
pLayer.SetVisibility(Value);
}
}