I have a background thread running that fires events, but how can I ensure a thread safe invocation of these events using NET CF?
I would use ISyncronizeInvoke on the N
Yes it is available in .NET CF, here is an extract from such a project:
SampleMethod() is called from another thread.
delegate void SimpleInvokeDelegate();
private void SampleMethod()
{
if (InvokeRequired)
{
Invoke(new SimpleInvokeDelegate(SampleMethod));
}
else
{
// Update UI elements here.
}
}
The Compact Framework does have Control.Invoke
/BeginInvoke
, although I believe it's limited to the EventHandler
delegate (with any other delegate throwing an exception at execution time).
Assuming your actual instance of ISynchronizeInvoke
is going to be a UI control, I'd just pass the reference as Control
to whatever needs it. If you really want to use an interface, you could always create your own ISynchronizeInvoke
interface, and then an implementation which just wraps Control
.