C# how should I go about creating this threading application?
Alright I will attempt to explain every aspect of why I need to do this a certain way. Basically, I need an application to execute a certain .exe multiple times asynchronously. Specs:
- I need to be able to restrict the amount of executions going at one time.
- It has to use threading because my program has a GUI and simply launching the .exe's and monitoring them will 开发者_开发问答lock up the .GUI AND the console for other things.
How should I go about doing this? (examples help me a lot)
I've already told you multiple times how you should go about this. The launcher program has a single thread. It monitors the child processes. If a process ends and there is a free processor, it starts up a new process and affinitizes the process to that processor. When it's not doing any of those things it yields control back to its UI. Since each of those operations is of short duration, the UI never appears to block.
UPDATE
Actually this wasn't a great answer. As Henk pointed out in my comments, when you call Process.Start()
that's not a blocking call. You have to explicitly set Process.EnableRaisingEvents
to true
, and handle the Exited
event. I'm not sure if the Exited
event is fired in the calling thread (I doubt it, but you should check), but the point is starting a process isn't a blocking call, so you don't need more threads doing the waiting.
See this similar answer for more details: Async process start and wait for it to finish
PREVIOUS ANSWER
Fire off your threads (limited to your max number of threads), and have them run the external exe using the Process.Start()
method. Make sure you set them to wait for the process to finish. When the processes finish, have the threads use something like Interlocked.Increment()
to increment a counter variable that you can read from your main form code. Better still, have those threads call a callback delegate (e.g. Action<T>
), which will in turn check for this.InvokeRequired
before doing the actual work.
精彩评论