Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting running in Main Thread in C# library

I'm creating a C# dll, which is going to be used by others developers in WinForms. For some reasons, I want to detect, if methods from this library, are called from Main (GUI) Thread and warn developer he has done such a thing (ie. in log file). Is there any reasonable way to detect calling method from main thread? Remember I have no access to WinForm application.

like image 808
stachu Avatar asked Oct 22 '08 12:10

stachu


2 Answers

An easy solution in this case is to declare a static control in the library assembly that is created on the Main UI thread. If you want to detect if the library is called from the main thread, then use the following

if (MyLibraryControl.InvokeRequired)
  //do your thing here
like image 104
ageektrapped Avatar answered Oct 06 '22 01:10

ageektrapped


The simplest option (if you have a form/control handy) is to check InvokeRequired.

In the absence if that, you could try using SynchronizationContext to simulate a Post or Send, checking what thread that happens on? Calling Send or Post will switch to the UI thread.

like image 34
Marc Gravell Avatar answered Oct 06 '22 00:10

Marc Gravell