Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ConductorBaseWithActiveItem swallows exceptions in ActivateItemAsync #863

Open
nkreipke opened this issue Jun 22, 2023 · 0 comments
Open

Comments

@nkreipke
Copy link

Exceptions thrown in ActivateItemAsync, including all other methods called from the default implementation (TryDeactivateAsync, TryActivateAsync, NotifyOfPropertyChange, OnActivationProcessed) are silently discarded.

Repro:

public class MainViewModel : Conductor<Model>.Collection.OneActive
{
    public MainViewModel()
    {
        Items.AddRange(new []
        {
            new Model(),
            new Model(),
            new Model(),
        });
    }

    public override Task ActivateItemAsync(Model item, CancellationToken cancellationToken = new CancellationToken())
    {
        throw new Exception("please notice me");
    }
}

When selecting an item in a WPF ListBox, nothing happens. This is especially bad if there is additional code after the exception, which is simply not being executed without any indication.

I've found a similar issue #745 which is probably related.

The reason is that the setter of ActiveItem calls ActivateItemAsync without awaiting the task. This is a regression from 3.x. I realize awaiting in a setter is not possible and this might be a design issue:

set => ActivateItemAsync(value, CancellationToken.None);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant