-1

I am executing following code:

grid.Invoke(New MethodInvoker(AddressOf RefreshDataSource))

getting InvalidOperationException exception.

Message: Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

Stack Trace:

   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)
Brij
  • 11,731
  • 22
  • 78
  • 116

3 Answers3

0

Change the call from the load event to form.shown event to ensure that the control has been created first

raj
  • 1
  • 1
0
if (!this.IsHandleCreated)
    this.CreateControl();

this.Invoke((MethodInvoker)delegate
    {
       //do so      
    });
ᗩИᎠЯƎᗩ
  • 2,122
  • 5
  • 29
  • 41
0

Add this before you call the invoke method while (!this.IsHandleCreated) System.Threading.Thread.Sleep(100)

amos godwin
  • 930
  • 9
  • 12