示例#1
0
文件: STAHelper.cs 项目: kevtham/twin
		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
文件: STAHelper.cs 项目: pari421/twin
        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());
                }
            }
        }
示例#3
0
文件: STAHelper.cs 项目: pari421/twin
 private void Run()
 {
     while (true)
     {
         Job current = null;
         lock (jobs) {
             if (jobs.Count == 0)
             {
                 Monitor.Wait(jobs);
                 continue;
             }
             else
             {
                 current = jobs.Dequeue();
             }
         }
         current.Run();
         lock (current) {
             Monitor.PulseAll(current);
         }
     }
 }