Bug 24402 - Animation throws "The given key was not present in the dictionary"
Summary: Animation throws "The given key was not present in the dictionary"
Status: RESOLVED FIXED
Alias: None
Product: Forms
Classification: Xamarin
Component: Android ()
Version: 1.4.2
Hardware: All Mac OS
: Normal major
Target Milestone: ---
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2014-11-10 12:10 UTC by Jon Douglas [MSFT]
Modified: 2015-11-30 21:03 UTC (History)
11 users (show)

Tags: AC
Is this bug a regression?: ---
Last known good build:


Attachments
Reproduction (90.12 KB, application/x-zip-compressed)
2014-11-10 12:10 UTC, Jon Douglas [MSFT]
Details


Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.


Please create a new report on Developer Community or GitHub with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:
Status:
RESOLVED FIXED

Description Jon Douglas [MSFT] 2014-11-10 12:10:56 UTC
Created attachment 8681 [details]
Reproduction

Customer is running into the issue described below:

I have a custom "busy" indicator that consists of the customer's logo in an image control combined with an Animation where I await on RotateTo in a loop to have it rotate until the control is no longer being displayed. The animation looks great, but it occasionally will throw:

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. at System.Collections.Generic.Dictionary`2<string, Xamarin.Forms.AnimationExtensions/Info>.get_Item (string) <0x00350> at Xamarin.Forms.AnimationExtensions.HandleTweenerUpdated (object,System.EventArgs) at Xamarin.Forms.Tweener.b__0 (long) at Xamarin.Forms.Ticker.SendSignals (int) at Xamarin.Forms.Platform.Android.AndroidTicker.<.ctor>b__0 (object,Android.Animation.ValueAnimator/AnimatorUpdateEventArgs) at Android.Animation.ValueAnimator/IAnimatorUpdateListenerImplementor.OnAnimationUpdate (Android.Animation.ValueAnimator) [0x0000d] in /Users/builder/data/lanes/1131/2a7b6821/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Animation.ValueAnimator.cs:134 at Android.Animation.ValueAnimator/IAnimatorUpdateListenerInvoker.n_OnAnimationUpdate_Landroid_animation_ValueAnimator_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/1131/2a7b6821/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Animation.ValueAnimator.cs:85 at (wrapper dynamic-method) object.486b435c-796f-423f-9ffb-9c31a2d14e9f (intptr,intptr,intptr)

More information: it appears to happen most often when the control containing the animated image is transitioning to the hidden state. Is there perhaps a way to cancel the animation before IsVisible is set to false?

This is reproducible with the SpinnerException.zip attachment by running and toggling the visibility.

Using: Xamarin.Forms.1.2.3.6257
Comment 1 Sadik Ali 2014-11-11 08:23:10 UTC
I have checked this issue and with the help of attached sample I am able to reproduce this issue .

When I deploy the attached sample and tab the "Toggle" button It shows a animation and when I again press the "Toggle" button I am getting following exception: 

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.

Screencast: http://www.screencast.com/t/O2ZHIIfA6C

Application output: https://gist.github.com/saurabh360/88c046bac847709b17a4
IDE logs: https://gist.github.com/saurabh360/7efacc84118392202b43

Environment Info:

Xamarin.Forms: 1.2.3.6257

=== Xamarin Studio ===

Version 5.5.3 (build 6)
Installation UUID: 6ea47b0d-1852-4aaf-808d-373ff0a5002b
Runtime:
	Mono 3.10.0 ((detached/e204655)
	GTK+ 2.24.23 (Raleigh theme)

	Package version: 310000023

=== Apple Developer Tools ===

Xcode 6.1 (6604)
Build 6A1052d

=== Xamarin.Mac ===

Version: 1.9.0.608 (Trial Edition)

=== Xamarin.Android ===

Version: 4.18.0 (Trial Edition)
Android SDK: /Users/jatin66/Desktop/Backup/android-sdk-macosx
	Supported Android versions:
		1.6    (API level 4)
		2.1    (API level 7)
		2.2    (API level 8)
		2.3    (API level 10)
		3.0    (API level 11)
		3.1    (API level 12)
		3.2    (API level 13)
		4.0    (API level 14)
		4.0.3  (API level 15)
		4.1    (API level 16)
		4.2    (API level 17)
		4.3    (API level 18)
		4.4    (API level 19)
		4.4.87 (API level 20)
Java SDK: /usr
java version "1.7.0_65"
Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

=== Xamarin.iOS ===

Version: 8.4.0.15 (Trial Edition)
Hash: 08968c4
Branch: 
Build date: 2014-10-20 21:48:06-0400

=== Build Information ===

Release ID: 505030006
Git revision: fbe3e9453daf6a3bb9a9709ed22bec35f7c9056b
Build date: 2014-10-23 13:08:38-04
Xamarin addins: e44add2b39de4dd57c0742bb2e620dfad84c64c6

=== Operating System ===

Mac OS X 10.10.0
Darwin Jatin66s-iMac.local 14.0.0 Darwin Kernel Version 14.0.0
    Fri Sep 19 00:26:44 PDT 2014
    root:xnu-2782.1.97~2/RELEASE_X86_64 x86_64
Comment 2 thomasvs 2015-06-03 13:31:08 UTC
This issue is confirmed for quite a while now, any ideas when it will be fixed?
Comment 3 Hines Vaughan III 2015-07-08 14:02:42 UTC
Yea, I am getting a very similar issue on Android using the latest everything. This is happening to me when a user repeatedly and rapidly clicks the Element that is being animated. We are placing a GestureRecognizer on a ContentView and, when clicked, we run the following:

GestureRecognizers.Add(new TapGestureRecognizer {
        Command = new Command(async o => {
            await this.ScaleTo(0.95, 50, Easing.CubicOut);
            await this.ScaleTo(1,    50, Easing.CubicIn);
                if (callback != null) {
                    callback.Invoke();
                }
        })
});
Comment 4 Hines Vaughan III 2015-09-16 12:16:20 UTC
Was able to fix this by only running the animation if the action that the animation was signaling was not already running.