i have just upgraded my computer to a Sony all in one PC and i have installed all the software i use,, but when it comes to running my application which uses infragistics controls via deployment and via Debugging environment the app crashes as soon as it has to load data into a XamDataGrid with the following error:
Argument Exception was unhandled
Item has already been added. Key in dictionary: 'Infragistics.Windows.Automation.Peers.DataPresenter.CellAutomationPeer' Key being added: 'Infragistics.Windows.Automation.Peers.DataPresenter.CellAutomationPeer'
I have tried tracking down the error but to no avail so any assistance will be greatly appreciated.
The Computer is running Windows 7 Professional 64bit and im using NetAdvantage WPF 2010.3
The issue should be addressed in the latest hotfix (available back in August). You can get the download by going to My Infragistics => Keys and Downloads.
I have tried installing the WPF 2250 Service Release but error still persists
Thanks for the quick reply. Now I'm able to see the exception even if recording tool is not running. Can you please give us any clue by looking at below stack trace? I'm getting below exception when with a simple test application.
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) at System.Windows.Automation.Peers.AutomationPeer.UpdateChildren() at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() at System.Windows.ContextLayoutManager.fireAutomationEvents() at System.Windows.ContextLayoutManager.UpdateLayout() at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg) at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.TranslateAndDispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Application.RunInternal(Window window) at MultiSelectDropdown.App.Main() in E:\NEWTFS\Main\Common\Source\CommonControls\Samples\MultiSelectDropdown\MultiSelectDropdown\obj\Debug\App.g.cs:line 0 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()
I'm sorry but there really is no information I can provide other than what I have. If you cannot upgrade and you have access to the source then you can make the change that I mentioned and use your own build of the assemblies.
The only other thing that I can think of is if you can live without automation support then you could override the OnCreateAutomationPeer in your window class or something above the xamDataGrid and return a derived automation peer of the peer class that element would use and override it's GetChildrenCore and return no children. This would of course mean that the grid would be invisible to any automation/accessibility client which could include your recording app, test platforms, etc. If you want to go this route then it might look something like:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer() { return new CustomWindowAutomationPeer(this); } } public class CustomWindowAutomationPeer : System.Windows.Automation.Peers.WindowAutomationPeer { public CustomWindowAutomationPeer(Window owner) : base(owner) { } protected override List<System.Windows.Automation.Peers.AutomationPeer> GetChildrenCore() { return new List<System.Windows.Automation.Peers.AutomationPeer>(); } }
protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer() { return new CustomWindowAutomationPeer(this); } }
public class CustomWindowAutomationPeer : System.Windows.Automation.Peers.WindowAutomationPeer { public CustomWindowAutomationPeer(Window owner) : base(owner) { }
protected override List<System.Windows.Automation.Peers.AutomationPeer> GetChildrenCore() { return new List<System.Windows.Automation.Peers.AutomationPeer>(); } }
Thanks Andrew !!. Will try this work around and see if it works for us.
Andrew, just to let you know that the issue is seen when Google Desktop process is running. When I kill Google Desktop process, the issue is resolved. I was able to reproduce this consistently when Google desktop running.
And the work around you provided for window is not working for me. Our customers are reporting same issue and it seems they are not running any other processes. Just wanted to check if you get any clue out of this information
Andrew, can you send me the source code location for Infragistics 9.1 version? We would like to try the fix you have suggested. Lot of our customers are reporting this issue so we are planning to provide the fix without upgradation.
OK, settings at the solution level overridden confguration settings at project level. I'm doing the whole recompilation with solution level release settings. will update you for any issues after that.thanks
Andrew, I debugged the code and verified that these assert statements are poping up now and then.
for example Debug.Assert(adjustedScrollPosOfTargetRecord >= 0); is rasing while editing the records. I indeed built the binaries in release mode but the binaries are not dropping at bin/Release instead they always drop in bin/Debug mode. I'm not sure if some other settings are overriding. Can you help us to build the binaries in release mode and if I'm missing something?
Thanks.
I have never seen that assert being raised so I cannot say what is happening. If you want us to look into that you would need to supply a sample that reproduces the issue. Basically the only assert in that routine is veritying that we have exited edit mode (or more accurately that we don't still have a CVP for a cell in edit mode which would/should have been cleared when the cell exited edit mode unless there was a problem there or unless someone tried to force the cell back into edit mode likely on another cell). That may well have been happening in your real application without you knowing since you would only see the assert if you were using a debug build - which you weren't with the release version.
I'm not sure what you are asking. If you are asking about when GetChildrenCore will be invoked as I mentioned I do not know as that is not something that we control. It is controlled/invoked by the WPF framework when something wants to get the children for a given automation peer or possibly when the associated element has been invalidated to update the cache. For anything further on that method you would have to check with MS or use reflector to review the WPF framework's implementation.
As to the OnSorted that is used to raise the Sorted event and from your description I do not know what is the cause of the NRE - it could be within your handling of the Sorted event or something else.
Andrew, our entire suite is compiled with the local fix and when application installed with the fix , I got this assertion failure message in one of our scenarios. I've not completed testing all possible scenarios.Could you verify the reason behind this message? Basically we have a grid component which has combo boxes in two columns added as xam editors. Items can be selected in each of these combo boxes and rows will be added dynamically once selection complete in any single row. While doing random selections, following assertion failure message popped up. This will be real concern for me to release the fix to QA.