[問題] textBox數值更新

看板C_Sharp作者 (工數煞到地平線)時間4年前 (2020/03/09 21:55), 編輯推噓2(206)
留言8則, 4人參與, 4年前最新討論串1/1
各位先進大家好,小弟在做關於感測器方面的應用 我是使用TwinCAT與感測器建立PLC變數 並使用C#的ADS協議來獲取我要的感測器數值 這部份程式大概會是這樣: private TcAdsClient tcAdsClient=new TcAdsClinet(); private int hvar=new int(); int dataone; void DataLoad () { hvar=tcAdsClinet.CreateVariableHandle("Plc"); dataone=(int)tcAdsClient.Readany(hvar,typeof(int)); textBox.Text=Convert.ToString(dataone); } private void timer_Tick(object sender, EventArgs e) { DataLoad } 以上主要是將我的感測器數值建立並顯示在textBox 我目前想做到的是能夠透過這個感測器的數值變化 來做為我機器移動的判斷依據 將我的機器移動到我想要移動到的位置 這邊的控制程式是以button去寫的 我的這部份程式大概是這樣: private void button_Click(object sender,EventArgs e) { Move (1,2,3);//移動至(1,2,3)座標位置 for(int j=2;j<10;j++) { if(double.Parse(textBox.Text)<5) { Move (1,j,3+1); } else { Move (1,j,3-1); } } } 程式主要的問題在於這個感測器數值textBox 它一直是在介面上刷新,而我時時在監測數值 而當我把textBox.Text當成條件式來使用時 條件式會直接讀取button按下去的瞬間的textBox值 來判斷它要走哪一行程式,在機器移動過程中 它就不會再去做判斷,假設button按下去時數值為3 它就只會執行Move (1,j3+1); 在這個迴圈走完前都只走一樣的路徑 即使過程中textBox數值改變都不會執行另外一行 我不太曉得問題出在哪裡,還是不能把textBox.Text 這個控制項來當作判斷式呢? 主要希望它能在過程中也能時時得到感測器的值 且根據這個值來做它必須移動到的點 或者有沒有可能這個跟多執行緒有關呢? 手機排版請見諒,希望能跟各位大大討論 小弟感激不盡,謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.124.33.222 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1583762126.A.377.html

03/09 23:26, 4年前 , 1F
你需要一隻BackgroundWorker去處理timer_Tick
03/09 23:26, 1F

03/09 23:29, 4年前 , 2F
或是IoT最常用的是非同步設計, 可以去瞭解一下 async
03/09 23:29, 2F

03/09 23:29, 4年前 , 3F
和 await 非同步程式設計方式
03/09 23:29, 3F

03/10 07:29, 4年前 , 4F
先把text存到區域變數,判斷式讀這個變數?
03/10 07:29, 4F

03/10 11:55, 4年前 , 5F
application.doevent
03/10 11:55, 5F

03/10 11:56, 4年前 , 6F
form thread 在做事情時不會更新ui
03/10 11:56, 6F

03/10 11:56, 4年前 , 7F
所以tb.text 會拿到一樣的值
03/10 11:56, 7F

03/10 14:57, 4年前 , 8F
謝謝各位 我會嘗試看看的!
03/10 14:57, 8F
文章代碼(AID): #1UPahEDt (C_Sharp)