0

私はWindowsフォームアプリケーションに取り組んでいます。アプリの実行時に Tick イベントをトリガーします。private void tmrDisplay_Tick(object sender, EventArgs e) - スレッドの開始時にメソッドが別のクラスから呼び出されることが期待されます。別のクラス - Class1 c から同じ tick イベントを呼び出す方法についてのヘルプはありますか? ありがとうございます

  namespace XT_3_Sample_Application
 {
   public partial class Form1 : Form
    {
    TcpClient tcpClient;
    Socket Socket_Client;
    StreamReader TcpStreamReader_Client;    // Read in ASCII
    Queue<string> receivedDataList = new Queue<string>();



    System.Timers.Timer tmrTcpPolling = new System.Timers.Timer(); 

    public Form1()
    {
        InitializeComponent();
        TM702_G2_Connection_Initialization();



    }

    void TM702_G2_Connection_Initialization()
    {
        tmrTcpPolling.Interval = 1;
        tmrTcpPolling.Elapsed += new ElapsedEventHandler(tmrTcpPolling_Elapsed);
    }
    #region Timer Event
    void tmrTcpPolling_Elapsed(object sender, ElapsedEventArgs e)
    {
        try
        {
            if (tcpClient.Available > 0)
            {
                receivedDataList.Enqueue(TcpStreamReader_Client.ReadLine());
            }
        }
        catch (Exception)
        {

            //throw;
        }
    }

    private void tmrDisplay_Tick(object sender, EventArgs e)
    {

        if (receivedDataList.Count > 0)
        {
            string RAW_Str = receivedDataList.Dequeue();
            //tbxConsoleOutput.AppendText(RAW_Str + Environment.NewLine);
            tbxConsoleOutput.AppendText(Parser_Selection(RAW_Str) + Environment.NewLine);
        }
    } 
   #endregion

   private void btnConnect_Click(object sender, EventArgs e)
    {
        tbxConsoleOutput.AppendText(Connection_Connect(tbxTCPIP.Text, Convert.ToInt32(tbxPort.Text, 10)));
        Thread t = new Thread(threadcal);
        t.Start(); 
    }
    static void threadcal()
    {
        Class1 c = new Class1();
        c.test("192.168.2.235",9999);

      }
  }
}
4

1 に答える 1

2

タイマーのクラスへの参照がある限り、呼び出すことができる public tick メソッドを公開できます。次に、コードを複製する代わりにタイマーのイベントでそれを使用します

private void tmrDisplay_Tick(object sender, EventArgs e)
{
    Tick();
}

public void Tick()
{
    if (receivedDataList.Count > 0)
    {
        string RAW_Str = receivedDataList.Dequeue();
        //tbxConsoleOutput.AppendText(RAW_Str + Environment.NewLine);
        tbxConsoleOutput.AppendText(Parser_Selection(RAW_Str) + Environment.NewLine);
    }
}
于 2012-11-20T02:51:45.587 に答える