线程使用非静态方法

时间:2014-02-20 00:02:52

标签: c# multithreading

我正在尝试编写一个简单的工具(它只包含一个类),但我坚持使用线程。 我不知道如何使用非静态方法运行线程。

我的Windows窗体代码是这样的:

public partial class Form1 : Form
{
   //--Some methods here--//
   void login();
   void start();
   void refresh();

   //--Button events--//
   private void button1_Click()
   {
       //I want to start thread here
       //Something like Thread t = new Thread(new ThreadStart(refresh));
       //t.Start();
   }
}

使用计时器,此线程应每隔x秒调用一次refresh(),但计时器不存在问题。 我遇到线程错误:

A field initializer cannot reference the non-static field, method, or property.

2 个答案:

答案 0 :(得分:2)

在button1_click()函数中,您可以使用lambda在另一个线程中调用refresh方法:

new Thread(
        () =>
        {
            refresh();
        }
        ).Start();

我很确定它会以那种方式运作

答案 1 :(得分:1)

如果您使用计时器进行刷新,那么我认为您不需要单独的线程来刷新。

或者,如果要异步调用timer_callback的刷新,可以创建一个Action委托并在其上调用BeginInvoke。

Action ac = new Action(this.refresh);
ac.BeginInvoke(null, null);

编辑: 如果您使用System.Threading.Timer,它本身在另一个线程上运行。因此,不建议从此计时器回调启动线程。检查this