示例#1
0
 public void SetApartmentState(System.Threading.ApartmentState state)
 {
     if (!this.SetApartmentStateHelper(state, true))
     {
         throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ApartmentStateSwitchFailed"));
     }
 }
示例#2
0
 private bool SetApartmentStateHelper(System.Threading.ApartmentState state, bool fireMDAOnMismatch)
 {
     System.Threading.ApartmentState state2 = (System.Threading.ApartmentState) this.SetApartmentStateNative((int)state, fireMDAOnMismatch);
     if (((state != System.Threading.ApartmentState.Unknown) || (state2 != System.Threading.ApartmentState.MTA)) && (state2 != state))
     {
         return(false);
     }
     return(true);
 }
示例#3
0
 static bool RunTest(System.Threading.ThreadStart testThreadStart, System.Threading.ApartmentState apartmentState)
 {
     testsRan++;
     System.Threading.Thread testThread = new System.Threading.Thread(testThreadStart);
     succeeded = false;
     testThread.SetApartmentState(apartmentState);
     testThread.Start();
     testThread.Join();
     return(succeeded);
 }
示例#4
0
        public static Alt.Threading.ApartmentState ToApartmentState(System.Threading.ApartmentState src)
        {
            switch (src)
            {
            case System.Threading.ApartmentState.STA:
                return(Alt.Threading.ApartmentState.STA);

            case System.Threading.ApartmentState.MTA:
                return(Alt.Threading.ApartmentState.MTA);

            case System.Threading.ApartmentState.Unknown:
                return(Alt.Threading.ApartmentState.Unknown);
            }

            return(Alt.Threading.ApartmentState.Unknown);
        }
示例#5
0
        /// <summary>
        /// Initialization of ScriptParser instance
        /// </summary>
        /// <param name="fileName">Script file name</param>
        /// <param name="searchDirs">Extra ScriptLibrary directory(ies) </param>
        private void Init(string fileName, string[] searchDirs)
        {
            referencedNamespaces = new ArrayList();
            referencedAssemblies = new ArrayList();
            referencedResources  = new ArrayList();

            //process main file
            FileParser mainFile = new FileParser(fileName, null, true, false, searchDirs);

            this.apartmentState = mainFile.ThreadingModel;

            foreach (string namespaceName in mainFile.ReferencedNamespaces)
            {
                PushNamespace(namespaceName);
            }

            foreach (string asmName in mainFile.ReferencedAssemblies)
            {
                PushAssembly(asmName);
            }

            foreach (string resFile in mainFile.ReferencedResources)
            {
                PushResource(resFile);
            }

            ArrayList dirs = new ArrayList();

            dirs.Add(Path.GetDirectoryName(mainFile.fileName));            //note: mainFile.fileName is warrantied to be a full name but fileName is not
            if (searchDirs != null)
            {
                dirs.AddRange(searchDirs);
            }
            this.searchDirs = (string[])dirs.ToArray(typeof(string));

            //process impported files if any
            foreach (ScriptInfo fileInfo in mainFile.ReferencedScripts)
            {
                ProcessFile(fileInfo);
            }

            //Main script file shall always be the first. Add it now as previously array was sorted a few times
            this.fileParsers.Insert(0, mainFile);
        }
示例#6
0
        /// <summary>
        /// Initialization of ScriptParser instance
        /// </summary>
        /// <param name="fileName">Script file name</param>
        /// <param name="searchDirs">Extra ScriptLibrary directory(ies) </param>
        void Init(string fileName, string[] searchDirs)
        {
            ScriptPath = fileName;

            packages             = new List <string>();
            referencedNamespaces = new List <string>();
            referencedAssemblies = new List <string>();
            referencedResources  = new List <string>();
            ignoreNamespaces     = new List <string>();
            precompilers         = new List <string>();
            compilerOptions      = new List <string>();

            //process main file
            FileParser mainFile = new FileParser(fileName, null, true, false, searchDirs, throwOnError);

            this.apartmentState = mainFile.ThreadingModel;

            foreach (string file in mainFile.Precompilers)
            {
                PushPrecompiler(file);
            }

            foreach (string namespaceName in mainFile.IgnoreNamespaces)
            {
                PushIgnoreNamespace(namespaceName);
            }

            foreach (string namespaceName in mainFile.ReferencedNamespaces)
            {
                PushNamespace(namespaceName);
            }

            foreach (string asmName in mainFile.ReferencedAssemblies)
            {
                PushAssembly(asmName);
            }

            foreach (string name in mainFile.Packages)
            {
                PushPackage(name);
            }

            foreach (string resFile in mainFile.ReferencedResources)
            {
                PushResource(resFile);
            }

            foreach (string opt in mainFile.CompilerOptions)
            {
                PushCompilerOptions(opt);
            }

            List <string> dirs = new List <string>();

            dirs.Add(Path.GetDirectoryName(mainFile.fileName));//note: mainFile.fileName is warrantied to be a full name but fileName is not
            if (searchDirs != null)
            {
                dirs.AddRange(searchDirs);
            }

            foreach (string dir in mainFile.ExtraSearchDirs)
            {
                if (Path.IsPathRooted(dir))
                {
                    dirs.Add(Path.GetFullPath(dir));
                }
                else
                {
                    dirs.Add(Path.Combine(Path.GetDirectoryName(mainFile.fileName), dir));
                }
            }

            this.SearchDirs = Utils.RemovePathDuplicates(dirs.ToArray());

            //process imported files if any
            foreach (ScriptInfo fileInfo in mainFile.ReferencedScripts)
            {
                ProcessFile(fileInfo);
            }

            //Main script file shall always be the first. Add it now as previously array was sorted a few times
            this.fileParsers.Insert(0, mainFile);
        }
示例#7
0
 public bool TrySetApartmentState(System.Threading.ApartmentState state)
 {
     throw null;
 }
示例#8
0
 public void SetApartmentState(System.Threading.ApartmentState state)
 {
 }
示例#9
0
 public void TestWithEnumAsArgument(System.Threading.ApartmentState state)
 {
 }
示例#10
0
 /// <summary>
 /// 延迟执行代码段(注意这将会在后台线程中执行)。
 /// </summary>
 /// <param name="millisecondsTimeout">延时(毫秒)。</param>
 /// <param name="action">需要执行的代码。</param>
 /// <param name="apartmentState">线程启动前的单元状态。</param>
 /// <param name="isBackground">是否为后台线程。</param>
 public static System.Threading.Thread Delay(
     int millisecondsTimeout,
     System.Threading.ThreadStart action,
     System.Threading.ApartmentState apartmentState = System.Threading.ApartmentState.Unknown,
示例#11
0
 public bool TrySetApartmentState(System.Threading.ApartmentState state)
 {
     return(default(bool));
 }
示例#12
0
 public bool TrySetApartmentState(System.Threading.ApartmentState state)
 {
     return(this.SetApartmentStateHelper(state, false));
 }
示例#13
0
		/// <summary>
		/// Initialization of ScriptParser instance
		/// </summary>
		/// <param name="fileName">Script file name</param>
		/// <param name="searchDirs">Extra ScriptLibrary directory(ies) </param>
		private void Init(string fileName, string[] searchDirs)
		{
			referencedNamespaces = new ArrayList(); 
			referencedAssemblies = new ArrayList();
			referencedResources = new ArrayList();
			
			//process main file
			FileParser mainFile = new FileParser(fileName, null, true, false, searchDirs);
			this.apartmentState = mainFile.ThreadingModel;

			foreach (string namespaceName in mainFile.ReferencedNamespaces)
				PushNamespace(namespaceName);

			foreach (string asmName in mainFile.ReferencedAssemblies)
				PushAssembly(asmName);
			
			foreach (string resFile in mainFile.ReferencedResources)
				PushResource(resFile);

			ArrayList dirs = new ArrayList();
			dirs.Add(Path.GetDirectoryName(mainFile.fileName));//note: mainFile.fileName is warrantied to be a full name but fileName is not
			if (searchDirs != null)
				dirs.AddRange(searchDirs);
			this.searchDirs = (string[])dirs.ToArray(typeof(string)); 

			//process impported files if any
			foreach (ScriptInfo fileInfo in mainFile.ReferencedScripts)
				ProcessFile(fileInfo);

			//Main script file shall always be the first. Add it now as previously array was sorted a few times
			this.fileParsers.Insert(0, mainFile); 
		}
示例#14
0
        public ScriptParser(string fileName)
        {
            referencedNamespaces = new ArrayList();
            referencedAssemblies = new ArrayList();

            //process main file
            FileParser mainFile = new FileParser(fileName, null, true, false, null);
            this.apartmentState = mainFile.apartmentState;

            foreach (string namespaceName in mainFile.ReferencedNamespaces)
                PushNamespace(namespaceName);

            foreach (string asmName in mainFile.ReferencedAssemblies)
                PushAssembly(asmName);

            this.searchDirs = new string[] {Path.GetDirectoryName(mainFile.fileName)}; //note: mainFile.fileName is warrantied to be a full name but fileName is not

            //process impported files if any
            foreach (ScriptInfo fileInfo in mainFile.ReferencedScripts)
                ProcessFile(fileInfo);

            //Main script file shall always be the first. Add it now as previously array was sorted a few times
            this.fileParsers.Insert(0, mainFile);
        }
示例#15
0
        private void Parse(string codeStr)
        {
            referencedScripts.Clear();
            referencedNamespaces.Clear();

            string clearedCode = codeStr;
            int codeStartPos = 0;

            //remove comments of '/**/' style
            clearedCode = RegexReplace(clearedCode, @"/\* ([^/] | /[^\*])*?  \*/", "", true);

            codeStartPos = RegexFind(clearedCode, @"(namespace|class)\s");
            string declarationRegion = codeStartPos != -1 ? clearedCode.Substring(0, codeStartPos-1) : clearedCode;

            //extract all referenced scripts, assemblies and namespaces
            referencedScripts.AddRange(GetStatements(	declarationRegion,
                                                        @"(/[^/]|[^/]) //css_import\s*",
                                                        new ParseStatement(ParseImport)));

            referencedAssemblies.AddRange(GetStatements(	declarationRegion,
                                                            @"(/[^/]|[^/]) //css_reference\s*",
                                                            new ParseStatement(ParseAsmRefference)));

            referencedNamespaces.AddRange(GetStatements(	declarationRegion,
                                                            @"using\s*",
                                                            new ParseStatement(ParseUsing)));

            string matchText = "";
            if (RegexFind(clearedCode.Substring(declarationRegion.Length-1), @"(\s+|\n)\[(\s*\w*\s*)\]\s*(\w*)\s*(static|static\s*static)(\s*\w*\s*)\s+ void\s*Main\s*\(", ref matchText) != -1)
            {
                if (matchText.IndexOf("STAThread") != -1)
                    apartmentState = System.Threading.ApartmentState.STA;
                else if (matchText.IndexOf("MTAThread") != -1)
                    apartmentState = System.Threading.ApartmentState.MTA;

            }
        }