/// <summary> /// 开始启动任务 /// </summary> /// <param name="interval">间隔时间(毫秒)</param> /// <param name="execMethod">要执行的方法</param> /// <returns>任务句柄 用于停止任务</returns> public static Timer Start(int interval, ExecMethod execMethod) { int isRunning = 0; Timer timerItem = new Timer(delegate { if (Interlocked.Exchange(ref isRunning, 1) == 0) { try { execMethod(); } catch (Exception ex) { throw ex; } finally { Interlocked.Exchange(ref isRunning, 0); } } }, null, interval, interval); TimerList.Add(timerItem); return(timerItem); }
static void Main() { Console.Write("Period of seconds = "); int seconds = int.Parse(Console.ReadLine()); Console.Write("Enter the count of numbers = "); int number = int.Parse(Console.ReadLine()); ExecMethod exec = new ExecMethod(Counter); for (int i = 1; i <= number; i++) { exec(i); Thread.Sleep(1000 * seconds); } }
public Calculator(string exp) { this.tree = CSharpSyntaxTree.ParseText(@"using System; namespace Lab_4 { class First { public double exec(double x, double y) { return " + exp + @"; } } } "); var compilation = CSharpCompilation.Create("first", new[] { tree }, new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) }, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); var stream = new MemoryStream(); EmitResult result = compilation.Emit(stream); if (!result.Success) { foreach (Diagnostic item in result.Diagnostics) { Console.Error.WriteLine($"{item.Id}: {item.GetMessage()}"); } return; } stream.Seek(0, SeekOrigin.Begin); Assembly assembly = Assembly.Load(stream.ToArray()); Type type = assembly.GetType("Lab_4.First"); ConstructorInfo constructorInfo = type.GetConstructors().First(); var instance = constructorInfo.Invoke(null); MethodInfo method = type.GetMethod("exec"); delegat = (ExecMethod)method.CreateDelegate(typeof(ExecMethod), instance); }