function ReadEmpNo(Port, BaudRate: Integer; EmpNo: array of byte): Integer; stdcall; external 'Reader.dll';
type
TMyThread = class(TThread)
protected
procedure Execute; override;
end;
procedure TMyThread.Execute;
var
i: Integer;
EmpNo: array[0..10] of byte;
strNo: string;
begin
FreeOnTerminate := True; {這可以讓執行緒執行完畢后隨即釋放}
try
// while (true) do
begin
strNo := '';
if ReadEmpNo(StrToInt('1') - 1, 19200, EmpNo) = 0 then
begin
//ShowMessage(Trim(PChar(@EmpNo)));
strNo := Trim(PChar(@EmpNo));
end;
FormC_input.edt_no.Text := '22222';//strNo;
sleep(3000);
end;
finally
// variable.Free;
end;
end;
問題出在紅色部分,就是這個FORM上的控制元件無法把值弄上去..
但這段代碼我另外用D7寫個程式可以出來的..
uj5u.com熱心網友回復:
是第26行著色不能
FormC_input.edt_no.Text := '22222';//strNo;
uj5u.com熱心網友回復:
執行緒中不要直接修改VCL,Delphi的VCL是不保證多執行緒安全的,給Form添加一個procedure,然后再執行緒中用Synchronize同步到主執行緒中執行,在這個Procedure中,修改VCL的值
uj5u.com熱心網友回復:
同意樓上,只要要訪問UI的,都需要使用同步功能轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/94519.html
標籤:語言基礎/算法/系統設計
上一篇:表單中的控制元件如何放大
下一篇:面向介面編程問題
