delphiでスレッド内からTForm内のプロシージャ
を呼び出したいんですが
プロシージャをTForm1内でPublic指定するだけじゃ
呼び出せないのでしょうか?
どなたか回答お願いします。
type
TForm1 = class(TForm)
private
public
procedure FileCheck;
end;
TClientThread = class(TThread)
private
public
procedure Execute; override;
end;
Procedure TForm1.FileCheck;
begin
ShowMessage('Test');
end;
end.
Procedure TClientThread.Execute;
begin
FileCheck;
end;
end.
Form1.FileCheck;
でいけるはずです。
ただし、スレッドセーフかどうかは分かりません。
メラトニンさん
回答ありがとうございます。
スレッドセーフかどうかは調べてみます。
ありがとうございました。
D5のHelpより一部抜粋
> VCL コンポーネントあるいはフォームにアクセスするメソッドの呼び出しはメイン VCL スレッド内からのみ行うか,
> Synchronize メソッドは,Method で指定されたメソッドをメイン VCL スレッドの元で実行することにより,スレッド間の衝突を回避します。
「VCLコンポーネントあるいは、フォームにアクセスする場合、Synchronize メソッドを使ってスレッド間の衝突を回避しましょう」と読み取れます。
なお、当方で、Threadから直接、Form.Memo1.Lines.Add(〜〜)のように記述した場合、ときどき謎のエラーが発生しました(内容までは記憶になし)。
ん?さん
レスありがとうございます。
Synchronizeメソッドですか。
知りませんでした。
ヘルプで調べてみます。
ありがとうございます。