InvokeEvent:在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke

时间:2011-04-08 08:20:05

标签: c#

private void manager_OnWebSiteVisited(object source, WebSiteVisitedEventArgs args)
        {
            if (InvokeRequired)
                txtStatus.BeginInvoke(new WebSiteVisitedCallback(WebSiteVisited), new object[] { args });
            else
                txtStatus.Invoke(new WebSiteVisitedCallback(WebSiteVisited), new object[] { args });
        }

InvokeEvent:在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke。

我可以使用if(IsHandleCreated)但我不知道如果没有创建该怎么办。如何创建它?

1 个答案:

答案 0 :(得分:11)

只需访问Handle属性,如果尚未创建句柄,它将创建句柄。您也可以明确调用CreateHandle方法。

if (!this.IsHandleCreated)
{
    this.CreateHandle();
}

顺便说一句,您对InvokeRequired/Invoke/BeginInvoke的使用是错误的:如果InvokeRequired为false,则根本不应使用Invoke,您应该直接调用该方法。我想你想做的是:

        if (InvokeRequired)
            txtStatus.Invoke(new WebSiteVisitedCallback(WebSiteVisited), new object[] { args });
        else
            WebSiteVisited(args);