Читаем что такое MVVM и async/await, создаем UserControl с версткой типа 
<Grid>
            <Image Source="{Binding Path=ViewModel.ImageSource, Mode=OneWay}"/>
            <ProgressBar Value="{Binding Path=ViewModel.DownloadProgres, Mode=OneWay}"/>
 </Grid>
Создаем ViewModel для контрола с нужными полями методом async Task Download().
теперь во ViewModel главного окна делаем метод принимающий массив Task, допустим startDownloadImage(params Task[] tasks) и выполняющий эти таски (await Task.WhenAll(tasks)).
В итоге получаем от каждой кнопки мы шлем таску от соответствующего UserControl`a, а если нужно все скачать то передаем все таски разом.
как то так, если не понятно то пиши