2

タイマーを停止したいのですが、ティックの途中で、ティックが終了する前です。しかし、ボタンを使用してタイマーを停止すると、ダニがすべての機能を終了した後にのみ停止します。

4 つのラジオボタンと、選択したラジオボタンを変更し続けるタイマーを使用しています。停止ボタンを押すと、タイマーが停止し、どのラジオボタンが選択されているかを知る必要がありますが、ティックが終了するとタイマーが停止するため、選択されたラジオボタンが変更されます。

コードは次のとおりです。

namespace teste_bola
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Int32 x = 1000;

        private void ini_Click(object sender, EventArgs e)
        {

            timer1.Enabled = true;
        }

        private void par_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }
        private void t_Click(object sender, EventArgs e)
        {
            Int32 Intervalo = Convert.ToInt32(tb.Text);
            x = Intervalo;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            r3.Select();
            System.Threading.Thread.Sleep(x);
            r2.Select();
            System.Threading.Thread.Sleep(x);
            r1.Select();
            System.Threading.Thread.Sleep(x);
            r2.Select();
            System.Threading.Thread.Sleep(x);
            r3.Select();
            System.Threading.Thread.Sleep(x);
            r4.Select();
            System.Threading.Thread.Sleep(x);
        }

    }
}
4

4 に答える 4

1

コードで達成しようとしていることに従っていませんが、タイマーを正しく使用していないようです。

次のようにする必要があります。

各タイマーで、選択したラジオボックスを変更します。

あなたが実際にやっていることは次のとおりです。

各タイマーで、変更間の時間間隔ですべてのラジオボックスを変更します。

これは、最初のタイマー タイムアウトでティック コードが実行されることを意味します。2 番目のタイマー タイムアウトでは、最初のティック ジョブがまだ完了していませんでした。

これは、控えめに言っても、不安定な動作につながります。

私のアドバイス。ラジオ ボタンを ArrayList に追加します。次に、Timer tick で ArrayList の各項目を選択します。

于 2013-04-01T14:02:17.083 に答える
1

フラグを導入し、bool shouldStopボタンがクリックされたときに設定し、Tickハンドラーからチェックすることができます。true の場合は、メソッドを終了します。

于 2013-04-01T13:51:29.747 に答える
0

以下を試してください

private void timer1_Tick(object sender, EventArgs e)
    {
        r3.Select();
        System.Threading.Thread.Sleep(x);
        if(timer1.Enabled == false) return;
            r2.Select();
            System.Threading.Thread.Sleep(x);
            if(timer1.Enabled == false) return;
            r1.Select();
            System.Threading.Thread.Sleep(x);
            if(timer1.Enabled == false) return;
            r2.Select();
            System.Threading.Thread.Sleep(x);
            if(timer1.Enabled == false) return;
            r3.Select();
            System.Threading.Thread.Sleep(x);
            if(timer1.Enabled == false) return;
            r4.Select();
            System.Threading.Thread.Sleep(x);
            }
于 2013-04-01T13:58:05.083 に答える
0

timer1_Tick の実行中にスレッドがスリープ状態になり、イベントのクエリが発生する可能性があるため、この動作に直面する可能性があります。

アレックスが提案したように、フラグを追加できますが、スリープのたびに確認するか、アニメーションを別のスレッドに配置することをお勧めします。

于 2013-04-01T13:58:58.457 に答える