c# - When do these objects get garbage collected -
i have created following extension method wait page load when using webbrowser control.
public static task<bool> waitload(this webbrowser webbrowser, int wait) { var timerinternalwait = new timer {interval = 1000, tag = "internal"}; var timermaxwait = new timer {interval = wait}; var tcs = new taskcompletionsource<bool>(); webbrowsernavigatingeventhandler navigatinghandler = (sender, args) => timerinternalwait.stop(); webbrowser.navigating += navigatinghandler; webbrowserdocumentcompletedeventhandler documentcompletedhandler = (sender, args) => { timerinternalwait.stop(); timerinternalwait.start(); }; webbrowser.documentcompleted += documentcompletedhandler; eventhandler timerhandler = null; timerhandler = (sender, args) => { webbrowser.navigating -= navigatinghandler; webbrowser.documentcompleted -= documentcompletedhandler; timerinternalwait.tick -= timerhandler; timermaxwait.tick -= timerhandler; timermaxwait.stop(); timerinternalwait.stop(); tcs.setresult(((timer) sender).tag.tostring() == "internal"); }; timerinternalwait.tick += timerhandler; timermaxwait.tick += timerhandler; return tcs.task; } i have couple of question around though:
when, if ever, timers cease exist , gced? suppose same question applies lambda expressions.
and if answer never, there can ensure cleaned when no longer needed?
lastly, resharper gives me implicitly captured closure on navigatinghandler , documentcompletedhandler definitions. how can prevent happening?
really tricky question.
your timer won't garbage collected until task returned has finished.
why? ok, here tricky part. that's because of closure resharper telling about!
all variables used inside lambda kept alive framework reference ensure exist when lambda executed , restore them it's use. because using timer inside lambda timer kept alive while lambda exists, , lambda exists @ least until last line of lambda has been executed, setting result of task.
so it's sure assume timer kept alive until lambda has been executed.
Comments
Post a Comment