WindowsFormsSynchronizationContext.Send: how does the delegateprovided to this method interact with

  • Thread starter Thread starter eugen_nw
  • Start date Start date
E

eugen_nw

I did look under the hood and this method is calling
Control.Invoke(). Digging deeper down I've stopped at the
RuntimeMethodHandle._InvokeMethodFast() method whose code I cannot
find.

I know that the delegates invoked via Control.BeginInvoke() will use
the window's message pump to send and retrieve the delegate and its
arguments, so the control/form will not react to Windows messages
while it is executing the delegate. That is the behavior I want to
have as well when the delegate passed to
WindowsFormsSynchronizationContext.Send() executes.

For a bit of a background, I want to have this behavior in order to
make sure that a grid control will not repaint itself while I'm re-
populating the DataTable it is bound to. If you have other
suggestions on how to ensure that the grid will not read from the
DataTable at the same time a worker thread reloads it, please send
them my way. We have noticed that the application crashes if a grid
reads from a DataTable at
the same time the worker thread is busy clearing and repopulating it.
The
worker thread runs the queries and then merges the results in the
DataTable the controls are bound to. It is the merging of the data
only that I want to execute on the UI thread.


Thanks much, eugen
 
I did look under the hood and this method is calling
Control.Invoke().  Digging deeper down I've stopped at the
RuntimeMethodHandle._InvokeMethodFast() method whose code I cannot
find.

I know that the delegates invoked via Control.BeginInvoke() will use
the window's message pump to send and retrieve the delegate and its
arguments, so the control/form will not react to Windows messages
while it is executing the delegate.  That is the behavior I want to
have as well when the delegate passed to
WindowsFormsSynchronizationContext.Send() executes.

For a bit of a background, I want to have this behavior in order to
make sure that a grid control will not repaint itself while I'm re-
populating the DataTable it is bound to.  If you have other
suggestions on how to ensure that the grid will not read from the
DataTable at the same time a worker thread reloads it, please send
them my way.  We have noticed that the application crashes if a grid
reads from a DataTable at
the same time the worker thread is busy clearing and repopulating it.
The
worker thread runs the queries and then merges the results in the
DataTable the controls are bound to.  It is the merging of the data
only that I want to execute on the UI thread.

Thanks much,  eugen


Hello

Why are you using more then one thread?
Use event

Bast Regarts
Ohav Baumgarten
 
Back
Top