如何删除 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;
有关如何 Subscribe
和 Unsubscribe
事件的更多详细信息,请参阅 MSDN
我没有看到任何需要多次调用您的 Test
方法的用例,我建议 verify/validate 您的设计。
我从你的问题中了解到,你想检查 QueryResults_ContentsChanged
是否附加到任何其他 event
上,这是不可能的 (除非你有自己的逻辑)。
一般情况下,可以按如下方式退订活动。
queryResults.ContentsChanged -= QueryResults_ContentsChanged;
希望对您有所帮助。
情况如下:
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;
有关如何 Subscribe
和 Unsubscribe
事件的更多详细信息,请参阅 MSDN
我没有看到任何需要多次调用您的 Test
方法的用例,我建议 verify/validate 您的设计。
我从你的问题中了解到,你想检查 QueryResults_ContentsChanged
是否附加到任何其他 event
上,这是不可能的 (除非你有自己的逻辑)。
一般情况下,可以按如下方式退订活动。
queryResults.ContentsChanged -= QueryResults_ContentsChanged;
希望对您有所帮助。