В C# нет никаких деструкторов. Это - Финализатор, который является другой вещью.
различие - необходимо ли очистить управляемые объекты или нет. Вы не хотите пытаться очистить их в финализаторе, поскольку они, возможно, самостоятельно были завершены.
я просто недавно, оказалось, смотрел страница Destructors Руководства по программированию C#. Это показывает, что я ошибался в своем ответе, выше. В частности, существует различие между деструктором и финализатором:
class Car
{
~Car() // destructor
{
// cleanup statements...
}
}
эквивалентно
protected override void Finalize()
{
try
{
// Cleanup statements...
}
finally
{
base.Finalize();
}
}
Я еще не пробовал, но думаю, что приведенные ниже должны работать. При использовании ручного режима необходимо зарегистрировать PacketListener, который прослушивает пакеты Presence, которые имеют тип Presence.Type.subscribe
.
Сначала установите список:
Roster roster = connection.getRoster();
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
Затем добавьте список пакетов к указанному выше соединению, например:
connection.addPacketListener(new SubscriptionListener(), new PacketFilter(){
public boolean accept(Packet packet) {
if(packet instanceof Presence)
if(((Presence)packet).getType().equals(Presence.Type.subscribe))
return true;
return false;
}});
Приведенный выше код просто возвращает истину для всех запросов, но вы можете настроить его, т.е. установить значение true или false в зависимости от ввод графического интерфейса пользователя.