title: C#: How to force "calling" a method from the main thread by signaling in some way from another thread
body: <p>Sorry for long title, I don't know even the way on how to express the question</p>
  
  <p>I'm using a library which run a callback from a different context from the main thread (is a C Library), I created the callback in C# and when gets called I would like to just raise an event.</p>
  
  <p>However because I don't know what will be inside the event, I would like to find a way to invoke the method without the problem of locks and so on (otherwise the third party user will have to handle this inside the event, very ugly)</p>
  
  <p>Are there any way to do this?
  I can be totally on the wrong way but I'm thinking about winforms way to handle different threads (the .Invoke thing)</p>
  
  <p>Otherwise I can send a message to the message loop of the window, but I don't know a lot about message passing and if I can send "custom" messages like this</p>
  
  <p><strong>Example:</strong></p>
  
  <pre><code>private uint lgLcdOnConfigureCB(int connection, System.IntPtr pContext)
  {
      OnConfigure(EventArgs.Empty);
      return 0U;
  }
  </code></pre>
  
  <p>this callback is called from another program which I don't have control over, I would like to run OnConfigure method in the main thread (the one that handles my winform), how to do it?
  Or in other words, I would like to run OnConfigure without the need of thinking about locks</p>
  
  <p><strong>Edit 1:</strong></p>
  
  <p>I have a problem with this exception:</p>
  
  <p>CallbackOnCollectedDelegate retrived
  Message: Callback run on delegate 'G19dotNet!G19dotNet.LgLcd+lgLcdOnSoftButtonsCB::Invoke' collected in GarbageCollector. During unmanaged code delegates should be ensured will never be deleted until you are sure they will never be called</p>
  
  <p><strong>Edit 2:</strong></p>
  
  <p>Issue resolved by myself, thanks to Stackoverflow which always helps me!
  For future reference: <a href="https://stackoverflow.com/questions/3691873/defining-a-delegate-as-a-function-pointer">Defining a delegate as a function pointer</a></p>