Search code examples
c#taskquartz-schedulerstaapartments

How to make Quartz.net job to run in a single-threaded apartment?


I simply tried this:

    public class FooJob : IJob
{
    public FooJob() { }

    public void Execute(JobExecutionContext context)
    {
        Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
    }
}

But it produces InvalidOperationException. Ideas?


Solution

  • The thread has already been allocated from the thread pool so it can't become a thread created in an STA. What you can do is launch an STA thread from your IJob.Execute method.

    public void Execute(JobExecutionContext context)
    {
        Thread t= new Thread(DoSomeWork);
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
        t.Join();
    }