2

私はAx 4.0に取り組んでいます

msdn のドキュメントに記載されているように、ローカル関数を使用してジョブで Object.setTimeOut メソッドを使用しようとしています。

static void setTimeOutJob()
{
    Object o = new Object();

    void printText()
    {
        ;
        info( "2 seconds has elapsed since the user did anything" );
    }
    ;
    // Set a Time Out with the idle flag set to false
    o.setTimeOut(identifierstr(printText), 2000, false);
}

しかし、この単純な仕事は何も生み出さないので、何かが欠けているようです。

誰かがこれで働いていますか?

4

2 に答える 2

3

このsetTimeoutメソッドは、ジョブのローカル関数では機能しません。

tutorial_Timer実際の例については、代わりにフォームを見てください。

アップデート:

メソッドは「魔法のsetTimeout」機能ですが、AX をマルチスレッド環境に変えるわけではありません。

Windowsイベント ループが動作している間のみ機能します。AX コンテキストでは、フォームが実行中で、他の誰かがフォームが完了するのを待っていることを意味します。sleep機能が基準を満たしていません。

また、オブジェクトは「生きている」必要があり、ガベージコレクションされたオブジェクトを呼び出すのは良くありません!

例 (クラスベース):

class SetTimeoutTest extends Object //Yes, extend or it will not compile
{
    str test;
}

public void new()
{
    super();
    test = "Hello";
}

public str test()
{
    return test;
}

protected void timedOut()
{;
    test = "2 seconds has elapsed since the user did anything";
    info(test);
}

static void main(Args args)
{
    SetTimeoutTest t = new SetTimeoutTest();
    FormRun fr;
    ;
    t.setTimeOut(methodStr(SetTimeoutTest,timedOut), 2000, false);
    //sleep(4000); //Does not work
    fr = ClassFactory::formRunClassOnClient(new Args(formstr(CustGroup))); //Could be any form
    fr.init();
    fr.run();
    fr.wait(); //Otherwise the t object runs out of scope
    info(t.test());
}
于 2012-07-06T10:39:36.397 に答える
0

仕事だけではうまくいかないと思います。メソッドが要素レベルにあるフォームで使用し、element.setTimeoutを実行しましたが、正常に動作します。

于 2012-07-06T16:14:31.503 に答える