[IronPython] IronPython/Silverlight -- callback problem

Michael Foord fuzzyman at voidspace.org.uk
Wed Jul 7 18:49:50 CEST 2010


On 06/07/2010 15:59, Jan-Philip Gehrcke wrote:
> Hello,
>
> I don't know if this is more an IronPython (2.6.1) issue than a 
> Silverlight (4) issue, but I hope that I am talking to the right 
> audience again (thank you for the great answers last time).
>
> I've created an `Image` class managing images based on 
> System.Windows.Media.Imaging.BitmapImage. My method 
> `image_instance.load_and_show()` should load the image from a given 
> URI and then show it in an XAML <image /> element. The important thing 
> is that the showing part should only happen after it is sure that the 
> image has loaded correctly. To control this, I use the 
> BitmapImage.ImageOpened event. This is the relevant part of the code 
> from my `Image` class:
>
>
> def load_and_show(self):
> self.bi = BitmapImage(Uri(self.abspath, UriKind.Absolute))
> self.bi.ImageOpened += self.successfully_loaded_now_show
> self.bi.ImageFailed += self.load_failed
> #self.xaml_main_image.Source = self.bi # LINE A
>
> def successfully_loaded_now_show(self, s, e):
> debug("image loaded: %s" % s.UriSource) # LINE B
> self.xaml_main_image.Source = self.bi # LINE C
>
> def load_failed(self, s, e):
> debug("image load failed") # LINE D
>
>
> If the code is like shown above and I do 
> `image_instance.show_and_load()`, nothing happens. More exactly, LINE 
> B, C, and D are not reached. It is like *neither the event ImageOpened 
> nor ImageFailed is toggled*.
>

It seems likely then that the image is not opened or downloaded until 
you set it as the source on an image. Does the code behave differently 
if you write it in C#?

If you set the bitmapimage as the image source does the event then fire 
correctly? If so perhaps create the image control but only add it to the 
visual tree once the bitmap has loaded.

Michael

> If I re-activate (or un-outcomment =)) LINE A, the callbacks magically 
> work properly, i.e. after calling `image_instance.show_and_load()` the 
> image shows up in the UI (either via LINE A or C), and LINE B is 
> definitely reached (or LINE D in case of a wrong URI).
>
> The point is that I don't want LINE A, because showing the image 
> should happen in a more controlled manner. What's the problem in my 
> approach, why are the callbacks not called?
>
> Thank you in advance,
>
> Jan-Philip Gehrcke
> -- 
> http://gehrcke.de
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog

READ CAREFULLY. By accepting and reading this email you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies (”BOGUS AGREEMENTS”) that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.





More information about the Ironpython-users mailing list