我在使用 YahooFinanceAPI NuGet 包時遇到問題。我正在嘗試使用此包獲取歷史資料,現在我有一個視窗,用戶可以在其中放置一些資訊,單擊按鈕后,我想在串列視圖中顯示歷史價格。單擊按鈕時的程序是:
private async void BtnGetData_Click(object sender, RoutedEventArgs e)
{
DataTable Histo = new DataTable();
foreach (string s in ListCol)
{
DataColumn x = new DataColumn();
x.ColumnName = s;
x.DataType = System.Type.GetType("System.String");
Histo.Columns.Add(x);
}
Symbol = "^FCHI";// Ticker.Text;
StartDate = "21/02/2021";// DD.Text;
EndDate = "21/02/2022"; //DF.Text;
//Histo = DataFromYahoo.GetData(Symbol, StartDate, EndDate);
var awaiter = DataFromYahoo.ReceiveData(Symbol, StartDate, EndDate, Histo);
if (awaiter.Result == 1)
{
foreach (DataRow row in Histo.Rows)
{
foreach (DataColumn col in Histo.Columns)
{
YahooData.Items.Add(row[col].ToString());
}
}
}
}
這部分 :
var awaiter = DataFromYahoo.ReceiveData(Symbol, StartDate, EndDate, Histo);
來自我創建的 DLL:
public async Task<int> ReceiveData (string Symbol, string DD, string DF, DataTable Result)
{
DateTime StartDate;
DateTime EndDate;
StartDate = ConvertDate(DD);
EndDate = ConvertDate(DF);
var histo = await Yahoo.GetHistoricalAsync(Symbol, StartDate, EndDate,Period.Daily);
DataRow row;
foreach (var candle in histo)
{
row = Result.NewRow();
row["Date"] = candle.DateTime.Date.ToString();
row["Open"] = candle.Open.ToString();
row["High"] = candle.High.ToString();
row["Low"] = candle.Low.ToString();
row["Close"] = candle.Close.ToString();
row["AdjClos"] = candle.AdjustedClose.ToString();
row["Volume"] = candle.Volume.ToString();
Result.Rows.Add(row);
}
return 1;
}
但是當代碼到達部分時:
var histo = await Yahoo.GetHistoricalAsync(Symbol, StartDate, EndDate,Period.Daily);
它停止,沒有任何例外或錯誤訊息。
我從這里得到這部分
而且我不確定我做錯了什么。我也是 C# 的新手,我并不真正了解異步方法的作業原理,所以如果有人對我有一些答案,我會很高興。謝謝 !
編輯:ConvertDate() 函式也只會將日期從字串格式轉換為 DateTime 格式,因為它在鏈接中使用。
uj5u.com熱心網友回復:
您應該等待您的異步方法:
private async void BtnGetData_Click(object sender, RoutedEventArgs e)
{
DataTable Histo = new DataTable();
foreach (string s in ListCol)
{
DataColumn x = new DataColumn();
x.ColumnName = s;
x.DataType = System.Type.GetType("System.String");
Histo.Columns.Add(x);
}
Symbol = "^FCHI";// Ticker.Text;
StartDate = "21/02/2021";// DD.Text;
EndDate = "21/02/2022"; //DF.Text;
//Histo = DataFromYahoo.GetData(Symbol, StartDate, EndDate);
var awaiter = await DataFromYahoo.ReceiveData(Symbol, StartDate, EndDate, Histo);
if (awaiter == 1)
{
foreach (DataRow row in Histo.Rows)
{
foreach (DataColumn col in Histo.Columns)
{
YahooData.Items.Add(row[col].ToString());
}
}
}
}
通過例如訪問阻塞.Result屬性來“濫用”異步代碼可能會出現死鎖,這可能是您在此處遇到的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436553.html
