CrossThreadRunner.Run C# (CSharp) Method

Run() private method

private Run ( ThreadStart, userDelegate, ApartmentState, apartmentState ) : void
userDelegate ThreadStart,
apartmentState ApartmentState,
return void
    void Run(ThreadStart userDelegate, ApartmentState apartmentState)
    {
        lastException = null;

        var thread = new Thread(() => MultiThreadedWorker(userDelegate));
        thread.SetApartmentState(apartmentState);

        thread.Start();
        thread.Join();

        if (ExceptionWasThrown())
        {
            ThrowExceptionPreservingStack(lastException);
        }
    }

Usage Example

        protected override void OnPreProcess(object sender, PreProcessEventArgs args)
        {
            int threadID = AppDomain.GetCurrentThreadId();
            if(runningThreads[threadID]!=null
                || runningThreads.Count>0)
            {
                OutputDebugMessage("skipping method run from inside previous runner...");
                return ;
            }
            else
            {
                runningThreads[threadID]="some not null value";
            }

            OutputDebugMessage(threadID + ": Preparing to run method on separate thread and join it afterwards...");
            CrossThreadRunner runner  = new CrossThreadRunner(args.TargetObject,args.MethodCallMessage.MethodBase,args.MethodCallMessage.Args);
            runner.Run();
            OutputDebugMessage("Ran it on a separate thread...skipping actual method invocation on current thread");

            this.FlagCurrentMethodToBeSkipped(args);
        }