none
C#中Timer內的變數 RRS feed

  • 一般討論

  •  各位前輩好:

    簡列如下所示,我在Form中宣告一個陣列變數,並在btn中指定他的值,但是只要執行timer1_Tick,

    理論上a=1,但沒次都是變為零,我去偵錯它,發現指定時都正常,但一進入timer1_Tick,所有指定的數值皆變為零,

    請各位幫忙解答,謝謝!!

    public partial class Form1 : Form
        {
             public UInt16[] IntOutput = new UInt16[32];

                public Form1()
            {
                InitializeComponent();         
            }

            private void btnFindSlave_Click(object sender, EventArgs e)
            {
                IntOutput[0]=1;
            } 

          private void timer1_Tick(object sender, EventArgs e)
            {

             int a;

            a=IntOutput[0];

    }

    2012年10月4日 上午 10:39

所有回覆

  • 把int a移动到事件外边,这样做看看;如果依旧无法解决你的问题,请具体说明什么变数无法变化,都是0?

    public partial class Form1 : Form
        {
             public UInt16[] IntOutput = new UInt16[32];
    
             int a =0;
    
                public Form1()
            {
                InitializeComponent();          
            }
    
            private void btnFindSlave_Click(object sender, EventArgs e)
            {
                IntOutput[0]=1;
            } 
    
          private void timer1_Tick(object sender, EventArgs e)
            {
    
            a=IntOutput[0];
    
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月4日 下午 12:05
  • int a;會將變數宣告成區域變數, 區域變數會在方法每一次被呼叫皆重新建立, 所以會變成人0, 您可以將變數宣告和類別以解決問題
    2012年10月4日 下午 12:18
  • 我以下列的程式碼來模擬你的情境,差別在於當timer的tick事件觸發時,我把陣列的值顯示在lable中,不知道是不是你所要的結果。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public UInt16[] intOutput = new UInt16[32];
            
            public Form1()
            {
                InitializeComponent();
                
                timer1.Interval = 3000;
                label1.Text = intOutput[0].ToString();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                int a = intOutput[0];
                label1.Text = a.ToString();
            }
    
            
            private void button1_Click(object sender, EventArgs e)
            {
                intOutput[0] = 1;
                if (timer1.Enabled)
                    timer1.Enabled = false;
                else
                    timer1.Enabled = true;
            }
        }
    }
    


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔

    2012年10月4日 下午 12:31
  • 你需要找本入門書, 把 C# 最基本的觀念看一遍才是.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年10月4日 下午 01:22
    版主
  • 請先確定你在timer1的OnTick事件被觸發之前, 已經觸發 btnFindSlave 的 OnClick事件

    讓IntOutput[0] 的值能正確被設定為1



    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年10月4日 下午 02:04
  • 請先確認 timer.Enabled ?? 如你的 timer1.Enabled 是 true...那永遠都是 0 囉!
    2012年10月5日 上午 02:07
  • 對不起,各位前輩,是我自已搞錯了,是程式其它地方造成的,不好意思。
    2012年10月5日 上午 03:29
  • 對不起,各位前輩,是我自已搞錯了,是程式其它地方造成的,不好意思。
    请把你的具体错误写出来,并标记成答案。谢谢!

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月5日 上午 03:52
  • 是其他的哪些地方呢?

    光從你目前的程式碼看起來就有很大的問題了

    2012年10月18日 上午 09:46