Вопрос неясен, но, используя Invoke, вы отказываетесь от цели размещения запроса изображения в отдельном потоке. (Вы можете заметить, что ваш интерфейс перестает отвечать на запросы при выполнении запроса)
Вместо этого лучше создать новый объект потока, запустить его, а затем использовать Invoke для установки изображения (после его получения), что-то вроде
private void menuItem1_Click(object sender, EventArgs e)
{
etiquetaCargando.Visible = true;
Thread reqThread =
new Thread(new ThreadStart(RequestImage));
reqThread.Start();
}
private void RequestImage()
{
/* Get the image
...
*/
Invoke(SetTheImage, new object[] { theImage });
}
это предполагает, что у вас есть метод SetTheImage, который фактически выполняет работу по отображению изображения в вашей форме.