3

メインスレッドから作業スレッドにいくつかのパラメータを渡すにはどうすればよいですか (つまり、次のようにprocedure)?

Parallel.Async(
  procedure (const task: IOmniTask)
  begin
    //How does one pass in 'myParam' from the main thread, so that the statement bellow will work?
    s := task.Param['myParam'].AsString;
  end
);

IOmniTaskConfig(OtlParallel.pas 内の)の定義を確認すると、次のようなというcommented outプロパティがあります。Param

//    property Param: TOmniValueContainer read GetParam;

したがって、私の質問に対する答えはノーだと思いますが、そうでないことを願っています!

4

2 に答える 2

4

これには変数キャプチャを使用する必要があります。

var
  MyParam: Integer;
....
MyParam := 42;
Parallel.Async(
  procedure(const task: IOmniTask)
  begin
    Foo(MyParam);
  end
);

匿名メソッドの変数キャプチャに慣れていない場合は、ドキュメントで詳細に説明されています。

于 2013-05-16T16:10:08.930 に答える