I have an issue here. I have to set the Async property so the whole thing runs in a thread. I start an download and everything is fine. The Download events all happen as you expect.

But if I now kick the whole thing off again with the same URL, the component detects that it just download this image and aborts. No events are generated.

This is only a problem when Async is set to TRUE. If it is FALSE, then all you have to do is wait for the command to finish.

Obviously I can keep track of the URL I just downloaded and not call the function twice with the same name, but it would be good to have something generated, even an error event, would be useful.

I cannot see a different behavior here with async true or async false.

In both cases, when you set the same URL, it will do nothing (by design)
If you want to force a redownload, set URL first to blank and then again to the URL needed.

What you say is true, but maybe I didn't explain it properly.

If Async is False when you call URL it will return when the function is complete. Either it will have loaded a picture or not (if you specify the same url again). So no problem when Async is False.

When Async is True, the whole URL function call is executed in a Thread and signals completion in the "DownloadComplete" event. However if you specify the same url again, no events are generated. So the main application does not know what has happened. It would be good to have some event generated, even an error event would be useful to indicate the function call has completed.