Zarówno DataSet, jak i DataTable implementują IDisposable, więc zgodnie z tradycyjnymi najlepszymi praktykami powinienem wywołać ich metody Dispose (). Jednak z tego, co przeczytałem do tej pory, DataSet i DataTable nie mają w rzeczywistości żadnych niezarządzanych zasobów, więc Dispose () tak naprawdę niewiele robi. Ponadto nie mogę po prostu użyć, …
Coś jak: using (IDisposable disposable = GetSomeDisposable()) { //..... //...... return Stg(); } Uważam, że nie jest to właściwe miejsce na oświadczenie zwrotne, prawda?
Zacznij od tych prostych zajęć ... Powiedzmy, że mam prosty zestaw klas, taki jak ten: class Bus { Driver busDriver = new Driver(); } class Driver { Shoe[] shoes = { new Shoe(), new Shoe() }; } class Shoe { Shoelace lace = new Shoelace(); } class Shoelace { bool …
Wzorzec .NET IDisposable oznacza, że jeśli napiszesz finalizator i zaimplementujesz IDisposable, finalizator musi jawnie wywołać Dispose. Jest to logiczne i zawsze to robiłem w rzadkich sytuacjach, gdy finalizator jest uzasadniony. Jednak co się stanie, jeśli po prostu to zrobię: class Foo : IDisposable { public void Dispose(){ CloseSomeHandle(); } } …
Chcę uruchomić zadanie w wątku w tle. Nie chcę czekać na zakończenie zadań. W .net 3.5 zrobiłbym to: ThreadPool.QueueUserWorkItem(d => { DoSomething(); }); W .net 4 TPL jest sugerowanym sposobem. Typowy zalecany wzór, który widziałem, to: Task.Factory.StartNew(() => { DoSomething(); }); Jednak StartNew()metoda zwraca Taskobiekt, który implementuje IDisposable. Wydaje się, …
Utworzyłem niestandardową kontrolkę użytkownika WPF, która jest przeznaczona do użytku przez inną firmę. Mój formant ma prywatnego członka, który jest jednorazowy i chciałbym mieć pewność, że jego metoda usuwania będzie zawsze wywoływana po zamknięciu zawierającego okno / aplikacji. Jednak UserControl nie jest jednorazowy. Próbowałem zaimplementować interfejs IDisposable i subskrybować zdarzenie …
Moim głównym problemem jest to, że kiedy usingwywołuje Disposea StreamWriter, usuwa również BaseStream(ten sam problem z Close). Mam obejście tego problemu, ale jak widzisz, wymaga to skopiowania strumienia. Czy można to zrobić bez kopiowania strumienia? Ma to na celu pobranie zawartości ciągu (pierwotnie odczytanego z bazy danych) do strumienia, aby …
Mam następujący kod using(MemoryStream ms = new MemoryStream()) { //code return 0; } dispose()Metoda jest wywoływana na końcu usingzestawienia szelki }prawda? Skoro ja returnprzed końcem usingoświadczenia, czy MemoryStreamprzedmiot zostanie zutylizowany prawidłowo? co się tutaj stało?
Kiedy powinienem zaimplementować IDispose w klasie, a nie w destruktorze? Przeczytałem ten artykuł , ale nadal nie rozumiem. Zakładam, że jeśli zaimplementuję IDispose na obiekcie, mogę wyraźnie go „zniszczyć”, zamiast czekać, aż zrobi to garbage collector. Czy to jest poprawne? Czy to oznacza, że zawsze powinienem jawnie wywoływać metodę Dispose …
Czy istnieje metoda lub inny lekki sposób sprawdzenia, czy odniesienie dotyczy usuniętego obiektu? PS - To tylko ciekawostka (śpij dobrze, nie w kodzie produkcyjnym). Tak, wiem, że mogę złapać ObjectDisposedExceptionpróbę uzyskania dostępu do członka obiektu.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.