Skip to content

Errors in debug when switching profiles #2

Description

@mcpat-it

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions