2013-04-19 4 views
-1

Я выполняющийся следующий код:Invoke или BeginInvoke нельзя назвать элемента управления до тех пор, оконная ручка не была создана

grid.Invoke(New MethodInvoker(AddressOf RefreshDataSource)) 

получение InvalidOperationException исключение.

Сообщение: Invoke или BeginInvoke нельзя вызвать в элементе управления до тех пор, пока дескриптор окна не будет создан.

Трассировка стека:

at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) 
    at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) 
    at System.Windows.Forms.Control.Invoke(Delegate method) 
    at DataForm.BindData() in D:\Proj\DataForm.vb:line 380 
    at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) 
    at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) 
    at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink) 
+0

Вы называете Invoke в форме конструктора? – Steve

+0

нет, это не в конструкторе – Brij

+0

Пожалуйста, покажите больше кода - откуда вызван вызов? –

ответ

0

Изменить вызов от события нагрузки на form.shown событие, чтобы гарантировать, что управление было создано первое

0
if (!this.IsHandleCreated) 
    this.CreateControl(); 

this.Invoke((MethodInvoker)delegate 
    { 
     //do so  
    });