如何删除 Windows 应用程序中的所有事件处理程序?

How to remove all event handlers in Windows App?

情况如下:

    public async void Test()
    {
        List<string> fileTypeFilter = new List<string>();
        fileTypeFilter.Add(".jpg");
        fileTypeFilter.Add(".png");
        var folder = KnownFolders.PicturesLibrary;
        var queryOptions = new QueryOptions(CommonFileQuery.OrderByName, fileTypeFilter);
        var queryResults = folder.CreateFileQueryWithOptions(queryOptions);
        //queryResults.ContentsChanged += null;
        queryResults.ContentsChanged += QueryResults_ContentsChanged;
    }

我多次调用测试,所以当该文件夹中发生一些更改时,QueryResults_ContentsChanged 会触发很多次,但我只想要一次。我试过“+= null”,但它不起作用,所以我不知道如何从局部变量 queryResults 中删除所有事件处理程序。

您可以使用 -= 运算符取消订阅事件。

queryResults.ContentsChanged -= QueryResults_ContentsChanged;

有关如何 SubscribeUnsubscribe 事件的更多详细信息,请参阅 MSDN

我没有看到任何需要多次调用您的 Test 方法的用例,我建议 verify/validate 您的设计。

我从你的问题中了解到,你想检查 QueryResults_ContentsChanged 是否附加到任何其他 event 上,这是不可能的 (除非你有自己的逻辑)。

一般情况下,可以按如下方式退订活动。

queryResults.ContentsChanged -= QueryResults_ContentsChanged;

希望对您有所帮助。