silverlight - How do I determine when Dispatcher.BeginInvoke completes? -
i have silverlight 5 application uses imagetools silverlight save canvas png image. understand need work canvas on ui thread , have next code, works:
if (savefiledialog.showdialog() == true) { var stream = savefiledialog.openfile(); writeablebitmap.dispatcher.begininvoke(delegate { extendedimage extendedimage = writeablebitmap.toimage(); new pngencoder().encode(extendedimage, stream); }); } the problem if canvas big can take noticeable time code in begininvoke complete. since running on ui thread freezes browser window during execution.
after user selects location of save exported image, i'd popup kid window tells user, "please wait...", run image saving code posted above, , afterwards hide kid window automatically, i'm not having much luck accomplishing that.
for starters, begininvoke code runs asynchronously, how know when has completed?
if need phone call toimage() on ui thread thats fine, doesnt mean have encode image too.
something ensure ui stays responsive.
if (savefiledialog.showdialog() == true) { using (var stream = savefiledialog.openfile()) { writeablebitmap.dispatcher.begininvoke(delegate { extendedimage extendedimage = writeablebitmap.toimage(); system.threading.threadpool.queueuserworkitem(item => { new pngencoder().encode(extendedimage, stream); }); }); } } silverlight
No comments:
Post a Comment