2

現在、私はJavaからC#に移行しており、クレイジーな質問でいっぱいです。Windowsフォームアプリケーションで新しいことを試していますが、1分ごとにコードを実行するループを作成したいと思います。問題は、このコードをどこに配置するかわからないことです。たとえば、フォームの構造は次のようになります。

using System;

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

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            notifyIcon1.ShowBalloonTip(5000);


        }

        private void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
        {
            label1.Text = "Baloon clicked!";
        }

        private void notifyIcon1_BalloonTipClosed(object sender, EventArgs e)
        {
            label1.Text = "baloon closed!";
        }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {

        }

        private void option1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //some code here
        }

        private void option2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //some code here
        }

        private void option3ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            label1.Text = "Option 3 clicked!";
        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            option1ToolStripMenuItem_Click(this, null);
        }

        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnWrite_Click(object sender, EventArgs e)
        {
//code here

        }
    }
}

ループコードはどこに置くべきですか?:(

リプレイをよろしくお願いします!!!

4

8 に答える 8

8

フォームにタイマーを追加します。

ここに画像の説明を入力してください

そのIntervalプロパティを60000(ミリ秒単位で1分)に設定し、次のように設定EnabledTrueます。

ここに画像の説明を入力してください

Timer.Tickフォームデザイナでタイマーをダブルクリックするなどして、イベントハンドラをイベントにアタッチします。

private void timer1_Tick(object sender, EventArgs e)
{
    // do something here. It will be executed every 60 seconds
}
于 2012-07-16T07:51:39.467 に答える
7

タイマーを追加し、間隔を1000ミリ秒に設定する必要があります。また、OnTickイベントで、ループを使用してコードを追加します。

Timer tmr = null;
    private void StartTimer()
    {
       tmr = new Timer();
       tmr.Interval = 1000;
       tmr.Tick += new EventHandler<EventArgs>(tmr_Tick);
       tmr.Enabled = true;
    }

    void tmr_Tick(object sender, EventArgs e)
    {
        // Code with your loop here
    }
于 2012-07-16T07:51:35.927 に答える
0

Javaプラットフォームでどのように実行しますか?

Javaは.netと同じである必要があると思います。
実際、フォームプログラムは、イベントディスパッチャを含む通常のプログラムです。イベントディスパッチャはUIイベントをリッスンし、それらをイベントハンドラにディスパッチします。Javaや.netプラットフォームに関係なく、すべてのUIモードはこのようにすべきだと思います。

したがって、一般的に言えば、2つのオプションがあります。

  1. 最初にループを開始します。この場合、フォームのコンストラクターにコードを挿入する必要があります。
  2. ユーザーがボタンをクリックすると、ループが開始されます。この場合、イベントハンドラー関数にコードを挿入する必要があります。

はい、他の人が述べたように、あなたはタイマーを使うべきです。しかし、これは、コードがどこにあるべきかを知った後であるはずです。スリープ呼び出しでエンドレスループを使用することもできます。しかし、タイマーはより良い解決策です。

于 2012-07-16T08:22:17.077 に答える
0

タイマーのアイデアはもっと良いです。しかし、スレッドを使用したい場合。次に、これに従ってください

  1. プログラムの最初からすぐにやりたいと仮定しましょう
  2. Form1_Loadという名前の関数の本体(実際にはイベント)に次のように書くことができます
  3. あなたの実際のコードは、他のコードをガイドするためだけに while loop の中にあります
  4. C# でのスレッドの使用方法がわからない場合は、ガイドできます

bool button2Clicked = false;
private void Form1_Load(object sender, EventArgs e)
{    
    // A good Way to call Thread
    System.Threading.Thread t1 = new System.Threading.Thread(delegate()
    {
       while (!button2Clicked)
       {
          // Do Any Stuff;
          System.Threading.Thread.Sleep(60000);  //60000 Millieconds=1M
       }
    });
    t1.IsBackground = true;  // With above statement Thread Will automatically
    // be Aborted on Application Exit
    t1.Start();
}
于 2012-07-16T08:23:43.993 に答える
0

フォームに Timer コンポーネントをドラッグし、ダブルクリックします。では、コードをどうぞ。

Timer コンポーネントはメイン スレッドで実行されるため、心配することなく UI コンポーネントを変更できます。

別の方法として、独自のスレッドを持ち、いくつかの利点がある System.Timers.Timer を作成することもできますが、UI コンポーネントを変更するときに注意が必要です。http://msdn.microsoft.com/en-us/library/system.timers.timer.aspxを参照してください。

于 2012-07-16T07:54:11.293 に答える
0

バックグラウンド ワーカーを使用してコードを backgroundWorker.DoWork に配置するか、タイマーを使用してみてください

于 2012-07-16T07:54:18.407 に答える
0

ここにループコードを入れることはできません。

デザイナーでコントロールを探しますTimer。それができたら、毎分実行するように構成し、コードをTimer_Tickイベントに配置します。

または、コードでタイマーを手動で作成し、イベントに応答します :) しかし、初心者にとっては、デザイナーで行う方が簡単です!

于 2012-07-16T07:52:50.317 に答える
0

使用System.Timers.Timer:

System.Timers.Timer aTimer;

{
    aTimer = new System.Timers.Timer();
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 60000;
    aTimer.Enabled = true;
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}

タイマーの使用については、このチュートリアルを参照してください: C# タイマー

于 2012-07-16T07:56:17.100 に答える