0

選択変更イベントで、テーブルの 1 つからデータにアクセスしています。しかし、「呼び出しのターゲットによって例外がスローされました」がスローされます。

var query = conn.Table<auto_fares>().Where(x => x.city == cbCity.SelectedItem);
var result = await query.ToListAsync();
foreach (var item in result)
{
    txtDistance.Text = item.min_km.ToString();
    lblDayFare.Text = item.min_fare.ToString();
    lblNightFare.Text = item.night_charges.ToString();
}

Dispose ステートメントを追加した後、「await 演算子は非同期ラムダ式内でのみ使用できます。このラムダ式を 'async' 修飾子で作成することを検討してください。」

どうすればこれを解決できますか?

4

2 に答える 2

1

次のようにコードを書き直してみてください。

var selectedCity = cbCity.SelectedItem;
var query = conn.Table<auto_fares>().Where(x => x.city == selectedCity);
var result = await query.ToListAsync();
foreach (var item in result)
{
    txtDistance.Text = item.min_km.ToString();
    lblDayFare.Text = item.min_fare.ToString();
    lblNightFare.Text = item.night_charges.ToString();
}

非 UI スレッド (await query.ToListAsync() ) から UI コンポーネント (cbCity.SelectedItem) にアクセスしようとしています。

于 2012-10-22T18:00:36.907 に答える
0

この foreach は非同期で実行され、別のスレッドから UI にアクセスしています。foreach を Dispatcher.Invoke() でラップします。

そのようです:

Dispatcher.CurrentDispatcher.Invoke( new Action( () => {... your foreach...}   );
于 2012-10-22T17:36:14.473 に答える