Пример #1
0
		public static object Invoke(Func func) {
			Job j = new Job(func);
			if(Thread.CurrentThread.GetApartmentState() == ApartmentState.STA) {
				j.Run();
				return j.evaluate();
			} else lock(j) {
				STAHelper helper = STAHelper.Instance;
				helper.Enqueue(j);
				Logger.Current.Trace("Job created on STA thread, waiting");
				Monitor.Wait(j);
				Logger.Current.Trace("Job finished on STA thread, returning");
				return j.evaluate();				
			}
		}
Пример #2
0
		private void Enqueue(Job j) {
			lock(jobs) {
				jobs.Enqueue(j);
				Monitor.PulseAll(jobs);
			}
		}