我剛剛創建了一個基本控制檯應用程序,它使用我的框架從文本文件編譯C#代碼。在C中保持控制檯應用程序活着#
你運行這個的方式是「SecureCodeBridge.exe File.txt」,這個文本文件包含了創建和顯示可以正常工作的窗體的代碼。
的問題是,因爲我的應用程序是一個控制檯應用程序,它會立即退出從文本文件的方法被調用(表格顯示了第二和消失的控制檯應用程序退出...)
這是我的控制檯應用程序的代碼:
static void Main(string[] args)
{
string entString = args[0];
if(System.IO.File.Exists(entString))
{
string entContents = System.IO.File.ReadAllText(entString);
SecureCode sC = new SecureCode(entContents);
CompilerResults cR = sC.Compile();
if(cR.Errors.Count > 0)
{
//Abort!
foreach(CompilerError cE in cR.Errors)
{
Console.WriteLine(cE.ErrorText);
}
}
else
{
sC.Run(cR);
}
}
}
這是我的框架使用編譯和運行代碼的代碼:
public class SecureCode
{
string code;
public SecureCode(string source)
{
code = source;
}
public CompilerResults Compile()
{
Dictionary<string, string> providerOptions = new Dictionary<string, string>
{
{"CompilerVersion", "v3.5"}
};
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
CompilerParameters compilerParams = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false
};
compilerParams.ReferencedAssemblies.Add("System.dll");
compilerParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
compilerParams.ReferencedAssemblies.Add("System.Drawing.dll");
CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, code);
return results;
}
public void Run(CompilerResults results)
{
object o = results.CompiledAssembly.CreateInstance("Code.Class");
MethodInfo mi = o.GetType().GetMethod("Main");
mi.Invoke(o, null);
}
}
是有些方法可以在調用方法時保持控制檯應用程序的活動? (例如,被示出的形式)
我試過第二種方法,但它保持控制檯應用程序活着(凍結)它也將凍結窗體本身,任何想法? (嘗試在不同的線程上運行它,但隨後我們又回到了原來的形式,並一直退出) – user265889
在單獨的線程上運行調用到循環。弱言談仍將維持到形式超出範圍。 –