I am writing a plugin and when its switching between profiles (app in focus or not) I receive after a while (meaning after swichting many times) following errors all the time for each action I have implemented (I only copied the 3 different errors once):
[11:12:46 DBG] [Received] Event Type: WillDisappear
[11:12:46 ERR] Error when handling event
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at System.Collections.Generic.Dictionary`2.set_Item(TKey key, TValue value)
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.LifeCycleMiddleware.SendDisposeEvent(WillDisappearEvent e) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\LifeCycleMiddleware.cs:line 90
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.LifeCycleMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\LifeCycleMiddleware.cs:line 32
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.SendActionEventWithId(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 101
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.HandleWillDisapearEvent(WillDisappearEvent e) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 114
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 51
at Aeroverra.StreamDeck.Client.Pipeline.DefaultPipeline.StartListening(CancellationToken cancellationToken) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\DefaultPipeline.cs:line 57
[11:11:51 DBG] [Received] Event Type: TitleParametersDidChange
[11:11:51 ERR] Error when handling event
System.InvalidOperationException: Sequence contains no matching element
at System.Linq.ThrowHelper.ThrowNoMatchException()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
at Aeroverra.StreamDeck.Client.Cache.DefaultCache.TitleParametersDidChange(TitleParametersDidChangeEvent e) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Cache\DefaultCache.cs:line 187
at Aeroverra.StreamDeck.Client.Cache.DefaultCache.Update(IElgatoEvent e) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Cache\DefaultCache.cs:line 43
at Aeroverra.StreamDeck.Client.Pipeline.DefaultPipeline.HandleIncomingFinal(IElgatoEvent elgatoEvent) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\DefaultPipeline.cs:line 92
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.GlobalSettingsOrderingMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\GlobalSettingsOrderingMiddleware.cs:line 36
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.LifeCycleMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\LifeCycleMiddleware.cs:line 36
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.SendActionEventWithId(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 101
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 55
at Aeroverra.StreamDeck.Client.Pipeline.DefaultPipeline.StartListening(CancellationToken cancellationToken) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\DefaultPipeline.cs:line 57
[11:11:50 DBG] [Received] Event Type: WillAppear
[11:11:50 ERR] Error when handling event
System.InvalidOperationException: Sequence contains no matching element
at System.Linq.ThrowHelper.ThrowNoMatchException()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
at Aeroverra.StreamDeck.Client.Cache.DefaultCache.WillAppear(WillAppearEvent e) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Cache\DefaultCache.cs:line 160
at Aeroverra.StreamDeck.Client.Cache.DefaultCache.Update(IElgatoEvent e) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Cache\DefaultCache.cs:line 37
at Aeroverra.StreamDeck.Client.Pipeline.DefaultPipeline.HandleIncomingFinal(IElgatoEvent elgatoEvent) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\DefaultPipeline.cs:line 92
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.GlobalSettingsOrderingMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\GlobalSettingsOrderingMiddleware.cs:line 36
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.LifeCycleMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\LifeCycleMiddleware.cs:line 36
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.SendActionEventWithId(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 101
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.HandleWillAppearEvent(WillAppearEvent e) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 121
at Aeroverra.StreamDeck.Client.Pipeline.Middleware.IdSDKAndActionEventOrderingMiddleware.HandleIncoming(IElgatoEvent message) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\Middleware\IdSDKAndActionEventOrderingMiddleware.cs:line 42
at Aeroverra.StreamDeck.Client.Pipeline.DefaultPipeline.StartListening(CancellationToken cancellationToken) in C:\Users\xxx\Aeroverra.StreamDeck.Client\Pipeline\DefaultPipeline.cs:line 57
Do I something wrong or is it your client? I am using this at every action:
public override void WillAppear()
{
SetIcon();
//base.WillAppear();
}
public override void WillDisappear()
{
_logger.LogInformation("Event: WillDisappear Action");
//base.WillDisappear();
}
In your demo you are using:
public override async Task WillAppearAsync()
{
//Accessing the context
var col = Context.Column;
var row = Context.Row;
_logger.LogInformation("My cordinates are Col:{col} Row:{row}", col, row);
//You can use the Dispatcher to send information to the streamdeck
await Dispatcher.ShowOkAsync();
}
so I am unsure if the problem is, that I am using the non async overrides, or because I commented out the base.WillAppear() and base.WillDisapper()?
Update
I changed to async Willappear and deleted WillDisapper. No change. I inserted a try catch in your pipelines. Beside the errors above, I just received an additional error:
[14:11:46 DBG] [Received] Event Type: WillDisappear
[14:11:46 ERR] Error SendDisposeEvent: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct..
[14:11:46 DBG] [Received] Event Type: WillDisappear
I am writing a plugin and when its switching between profiles (app in focus or not) I receive after a while (meaning after swichting many times) following errors all the time for each action I have implemented (I only copied the 3 different errors once):
Do I something wrong or is it your client? I am using this at every action:
In your demo you are using:
so I am unsure if the problem is, that I am using the non async overrides, or because I commented out the
base.WillAppear()andbase.WillDisapper()?Update
I changed to async Willappear and deleted WillDisapper. No change. I inserted a try catch in your pipelines. Beside the errors above, I just received an additional error: