0

我需要使用线程来暂停/恢复弹丸运动。如果在button3_Click屏幕上绘制弹丸运动:

public void button3_Click(object sender, EventArgs e)
{
//... Lots of drawingcode...
}

我需要使用相同的方法暂停/恢复弹丸运动,button3_Click但我是线程新手,无法弄清楚如何。

我努力了:

        public partial class Simulation : Form
{
            Thread parallel1;
            Thread parallel2;

            public Simulation()
            {
                InitializeComponent();
                parallel1 = new Thread(new ThreadStart(button3_Click));
            }
}

但我得到一个错误...

No overload for 'button3_Click' matches delegate 'System.Threading.ThreadStart'

我认为我需要两个线程,以便当一个暂停时,另一个正在运行以获取button3_Click并恢复另一个线程。如何才能做到这一点?

4

1 回答 1

1

那是关于方法签名的。在 c# 中,方法的参数和名称是唯一的。所以这个错误告诉你没有任何方法可以调用没有任何参数。您可以使用

new Thread( new ParameterizedThreadStart(...

您可以发送您的参数。Sender 通常是您的按钮,您可以为 EventArgs 参数发送“new EventArgs()”。

但是最好的方法(我使用它)不要在按钮单击中编写任何复杂的代码。用不同的方法编写复杂的代码,然后在按钮单击下调用它。通常操作不止一次使用,因此您可以从任何地方调用您的方法而无需任何更改。写一个新的方法来进行你的操作。如果您的方法中需要任何参数,您可以使用 parameterizedThreadStart 调用它。请注意:如果您遇到任何类似这样的错误,一个或多个线程访问一个对象,您可以在线程启动之前设置此属性

CheckForIllegalThreadStart=false;

于 2013-02-24T21:37:25.220 回答