C# でgetLatLngを読んだがコールバックされない
- 題名: C# でgetLatLngを読んだがコールバックされない
- 著者: Kei
- 日時: 2009/02/10 9:35:27
- ID: 23971
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: C# でgetLatLngを読んだがコールバックされない
- 著者: 魔界の仮面弁士
- 日時: 2009/02/10 11:08:47
- ID: 23974
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: C# でgetLatLngを読んだがコールバックされない
- 著者: Kei
- 日時: 2009/02/10 11:53:27
- ID: 23975
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C# でgetLatLngを読んだがコールバックされない
- 著者: kei
- 日時: 2009/02/11 0:37:01
- ID: 23982
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
いつも参考にさせていただいています。
現在、C#から、webBrowser コントロール経由で、Google MAP API の getLatLng APIを呼び出して、住所から GPS のポイントを取得する処理を作成しています。
悩みは、このgetLatLngってAPIは非同期処理で処理が完了する前に関数を抜けてきて、結果として、webBrowser上の Javascript から C# に制御が返ってきちゃいます。
一応、getLatLng API にはコールバック関数を指定してそこにイベントが発生するようになっていますが、Javascript 単体でテストすると動くのですが、C#側からキックしてやると、コールバックができないんですよね。
ちなみに、Javascript側で、alert() を実行して一瞬止めるとC# にまでコールバックされる事は確認しているのですが、用もないのに alert()は使用したくないし・・・。
下記ロジックは基本的な部分は、問題ないと思います。
でも、意図どうりにコールバックさせるには何かが足りない。
何かいいアイデアはありませんかね?
/********* C# 側 ********/
とある関数の中 ()
{
object[] args = new object[] { add }; // add = 文字列の住所
object str = this.webBrowser1.Document.InvokeScript("GetAddress", args); // Javascriptの関数をキック
}
public void GetGoogleMapGpsEvt(string message) // javaScriptからのコールバック
{
Console.WriteLine("ReturnGPS=" + message);
GoogleMapEvt = 0;
}
/***** JavaScript側 **********/
function GetAddress(add)
{
geocoder = new GClientGeocoder();
//alert( add );
geocoder.getLatLng( add , Sub_GetGps );
//alert( "getLatLng Exit !" );
}
function Sub_GetGps(point)
{
alert( "Sub_GetGps( " + point + " )");
if( !point )
{
//alert( point + " NG !!" );
}
else
{
map.setCenter(point, 14);
var marker = new GMarker(point);
map.addOverlay(marker);
//alert( point + " OK !!" );
}
window.external.GetGoogleMapGpsEvt( point ); // GPSのPOINT をお土産にして C# の関数をキックてやる。
}