1

C#のWatiNを使用して、ブラウザー(現在はIEのみ)と対話しています。

WatiNのメソッドのいくつかは、onchanged()およびonclick()を特定のWeb要素に送信する単純なラッパーです。

WatiNは、このためのファイアアンドフォーゲットバージョンも提供します。これは、基本的にノンブロッキングバージョンを提供します。

私の質問は、ブラウザも同時に実行する2つのJS機能ですか?

たとえば、次のコードを想定します。

// Uses FireEventAsync("onchanged")
SelectList.SelectNoWait()

SelectList.FireEventAsync("onclick")

onclickとonchangedの両方のJS関数を同時に実行できますか?

同様の問題が発生しているとonchanged()思います。別のイベントを発生させている間も関数が実行されているという問題がありますが、それは技術的に可能かどうか疑問に思いました。

4

2 に答える 2

2

いいえ、特にWebworkerを使用しない限り、同時に複数の実行を行うことはできません。ブラウザコンテキストでアクティブにできるユーザースレッドは1つだけです。

通常、イベントで呼び出される小さな関数のみを実行します。ほとんどの長いタスクは、リソースに関連し、非同期です。

「イベントベース」であり、(最も重要なことですが)自然に非同期であるものから同期呼び出しを行おうとしない場合(私はAJAXについて考えます)、問題はありません。

于 2012-07-02T17:27:12.697 に答える
1

要するに:いいえ。JavaScriptの実行はシングルスレッドです。

ただし、非同期操作(ajax、タイマー、ワーカーなど)を使用すると、関数の一部をセットアップして、後でスレッドが解放されたときに実行することができます。

不自然な例は次のとおりです。

function foo() {
    setTimeout(function () {
        console.log('three');
    }, 10);

    console.log('one');
}

function bar() {
    console.log('two');
}

foo();
bar();

foobarは同期的に呼び出され、ログは。の順序で書き込まれますが、タイマーが'のログを後で遅延させるため、これらthree, one, twoは順番に実行されます。one, two, threethree'

また、ハンドラーが非同期を使用しない場合でもSelectNoWaitFireEventAsyncおそらく使用します。

于 2012-07-02T17:28:56.720 に答える