ManagementEventWatcher Stop/Start/ Утилизация проблем
Я получил действительно раздражающую проблему здесь... Рассмотрим следующий код:
private static void _KindlePlugedEventWatcher_EventArrived(
object sender,
EventArrivedEventArgs e)
{
var plugedLogicalDisk = (ManagementBaseObject)e.NewEvent["TargetInstance"];
if ((plugedLogicalDisk["VolumeName"] as string) == _KindleName)
{
var kindleID = plugedLogicalDisk["DeviceID"] as string; // logical letter, like "F:"
if (kindleID.IsNotNull() &&
/* somewhy this event fires two times in a sequence,
thus it is necessary to check,
if such kindleID is already present
in the list of pluged devices;
because of async sequence Pause() and Resume()
are necessary...*/
!(PlugedDevices.HasItem(
(kindleDevice) => { return kindleDevice.ID == kindleID ? true : false; }
)))
{
PauseListening();
App.Current.Dispatcher.Invoke(
async () =>
{
try
{
var kindleDevice = await KindleDevice.Create(kindleID);
PlugedDevices.Add(kindleDevice);
}
catch (FileNotFoundException)
{
/* means that Kindle might not has
'My Clippings.txt' at all,
or some IO melfunction happened */
throw;
}
});
ResumeListening();
}
}
}
И то и другое Pause...()
а также Resume...()
это просто обертки вокруг методов Stop()/Start(), предоставляемые классом MEW. Ну, это не работает вообще. Даже если я использую DETACH методы обработки (-= _KindlePlugedEventWatcher_EventArrived
)... ЭТО ПРОДОЛЖАЕТСЯ ВЫПУСК ВТОРОГО ВРЕМЕНИ. Более того, я попытался вызвать Dispose(). ЭТО НЕ ПОМОГАЕТ: МУЖСКОЙ ОБЪЕКТ И ЕЩЕ ЖИТЬ!!!
У кого-нибудь есть идея?