从其他线程调用主线程中的方法

时间:2013-06-15 11:18:41

标签: c# multithreading timer

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

T1将在应用程序的开头运行,然后在其Tick事件中,T2将启动 然后在T2的嘀嗒事件中,T3将开始。 最后,在T3的tick事件中,应该在应用程序的主线程中完成某些事情

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

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

1 个答案:

答案 0 :(得分:21)

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

如果您的主要帖子是表格,您可以使用以下简短代码处理:

 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");