我正在尝试编写一个简单的工具(它只包含一个类),但我坚持使用线程。 我不知道如何使用非静态方法运行线程。
我的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.
答案 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。