щелкните правой кнопкой мыши по изображению и выберите просмотр изображения. как только вы это сделаете, вы должны получить что-то похожее на приведенное ниже. В URL должна быть новая ссылка, если вы используете ее, она всегда будет приводить вас к изображению по мере его выхода.
Также вы можете щелкнуть правой кнопкой мыши по изображению и выбрать «Копировать местоположение изображения», и это даст вам новую ссылку. Я лично предпочитаю другой метод, так как он дает правильный предварительный просмотр изображения в полном размере.
Мне нравится общее представление, но я действительно вижу одну проблему. Важно обработать EndInvokes, или у Вас могут быть утечки ресурсов. Я знаю, что много людей не верит этому, но это действительно верно.
Вот одна ссылка, говорящая об этом. Также существуют другие.
Но основной ответ, который я имею: Да, я думаю, что у Вас есть хорошая идея здесь.
Необходимо создать, Начинаются и методы расширения Конца также. И если Вы используете дженерики, можно выполнить вызов выглядеть немного более хорошим.
public static class ControlExtensions
{
public static void InvokeEx<T>(this T @this, Action<T> action)
where T : Control
{
if (@this.InvokeRequired)
{
@this.Invoke(action, new object[] { @this });
}
else
{
if (!@this.IsHandleCreated)
return;
if (@this.IsDisposed)
throw new ObjectDisposedException("@this is disposed.");
action(@this);
}
}
public static IAsyncResult BeginInvokeEx<T>(this T @this, Action<T> action)
where T : Control
{
return @this.BeginInvoke((Action)delegate { @this.InvokeEx(action); });
}
public static void EndInvokeEx<T>(this T @this, IAsyncResult result)
where T : Control
{
@this.EndInvoke(result);
}
}
Теперь Ваши вызовы становятся немного короче и более чистыми:
this.lblTimeDisplay.InvokeEx(l => l.Text = this.task.Duration.ToString());
var result = this.BeginInvokeEx(f => f.Text = "Different Title");
// ... wait
this.EndInvokeEx(result);
И относительно Component
s, просто вызовите на форму или сам контейнер.
this.InvokeEx(f => f.toolStripItem1.Text = "Hello World");