2012-10-22 20 views
0

關於選擇更改的事件,我正在訪問我的一個表中的數據。但是拋出了「調用目標引發的異常」。如何在訪問數據時修復「調用目標引發的異常」?

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只能異步lamhda表達式中使用。可以考慮將這個lamhda表達與‘異步’修改」。

我該如何解決這個問題?

+1

看看InnerException - 這將告訴你什麼是*實際*發生。 –

+0

您可以給出例外的詳細信息... –

+0

我無法獲取內部異常,因爲它是從SQLite.cs文件中引發的,該文件是Windows 8應用程序開發中SQLite訪問的內置文件。請指導。 –

回答

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線程訪問UI組件(cbCity.SelectedItem) (等待query.ToListAsync())

+0

謝謝你!!你救了我!!!問題解決了。 –

0

這個foreach是異步執行的,你從另一個線程訪問你的UI。將您的foreach包裝在Dispatcher.Invoke()中。

像這樣:

Dispatcher.CurrentDispatcher.Invoke(new Action(() => {... your foreach...} ); 
+0

我沒有得到你想要解釋的@ h.alex。你能給我一個代碼塊嗎?再次感謝。 –

+0

如果這種方式在這種形式下無法正常工作,請選擇您的控件,或者更好地選擇它們所在的窗口,並使用它的Dispatcher而不是當前的窗口。不客氣。 –

+0

我可能是錯的,但它看起來像它是'cbCity.SelectedItem'這是在錯誤的線程上訪問。他發佈的代碼都沒有提示「foreach」在不同的線程上運行? – sybkar

相關問題