15

我试图在 C# 应用程序中同时运行 3 个级别的计时器,例如:

T1 将在应用程序开始时运行,然后在其 Tick 事件上,T2 将启动,然后在 T2 的滴答事件上,T3 将启动。最后,在T3的tick事件上,应该在应用程序的主线程中做一些事情

我的问题似乎是主线程中的代码在被其他线程调用时不起作用

我应该怎么做才能让主线程通过其他线程的调用来运行它的功能?

4

1 回答 1

30

最有可能的问题是您的主线程需要调用。如果您要在调试器中运行程序,您应该会看到跨线程操作异常,但在运行时此异常检查被禁用。

如果你的主线程是一个表单,你可以用这个短代码来处理它:

 if (InvokeRequired)
 {
    this.Invoke(new Action(() => MyFunction()));
    return;
 }

或 .NET 2.0

this.Invoke((MethodInvoker) delegate {MyFunction();});

编辑:对于控制台应用程序,您可以尝试以下操作:

  var mydelegate = new Action<object>(delegate(object param)
  {
    Console.WriteLine(param.ToString());
  });
  mydelegate.Invoke("test");
于 2013-06-15T11:44:45.677 回答