1

我试图创建一个通用的实用程序,用于在主线程上调用。以下是我想出的 - 这样做有什么问题吗?检查 IsHandleCreated 和 IsDisposed 是多余的吗?Disposed时,IsHandleCreated会被设置为false吗?(因为这是布尔的默认值)

    public static void InvokeMain(this Control Source, Action Code)
    {
        try
        {
            if (Source == null || !Source.IsHandleCreated || Source.IsDisposed) { return; }
            if (Source.InvokeRequired)
            {
                Source.BeginInvoke(Code);
            }
            else
            {
                Code.Invoke();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }    
    }

先谢谢了!威廉

4

1 回答 1

0

我是从头顶上回答的,如果有任何错误,请见谅;

您不应该捕获异常,除非您期望它们并且知道如何在它们被抛出的情况下做出反应,如果不是这种情况最好让它们冒泡,直到它们到达您记录它/显示的常见应用程序错误处理程序消息什么的。

如果控件为空/未初始化,还返回意味着您将隐藏一个可能的错误,您为什么要这样做?我非常喜欢调用失败而不是不做任何事情就返回,如果你想防止出现 NullPointer 异常,那么如果控件为 null,你应该自己引发异常(作为 ArgumentNullException)

public static void Invoke(this Control control, Action action)
{
    if (control == null)
        throw new ArgumentNullException("control");

    if (control.InvokeRequired)
    {
        control.Invoke(action);
        return;
    }

    action();
}

public static T Invoke<T>(this Control control, Func<T> action)
{
    if (control == null)
        throw new ArgumentNullException("control");

    if (control.InvokeRequired)
        return (T)control.Invoke(action);

    return action();
}
于 2012-05-09T18:34:49.547 回答