我正在开发一个正在工作的项目,我正在使用CefSharp将c#连接到JS,因为我不允许使用外部服务器甚至本地主机服务器来托管php或其他脚本语言。我需要达到的目标是我在c#中有一个异步方法,它正在读取我需要完成工作的csv,我已经通过调试逐步完成了这些值。它返回一个Task在我的js文件中调用该方法来读取本地文件并返回一个要处理的字符串数组。我得到了一个未决的承诺,当我使用等待待定的承诺坐在那里并停止我的浏览器,我一直在互联网上寻求帮助,我还没有发现任何似乎有用的东西。我尽可能多地发布当前代码,我需要为此找到一个解决方案或至少一些好的指针,以便从js脚本中获取c#的值以便我可以继续前进。
//C# Code::
public Task<string[]> GetCSV()
{
return GetCSVAsync(Encoding.UTF8, pB.GetDefaultPath(PathSelection.AppPathWeb) + "\\MatId\\Includes\\misc\\questions.csv");
}
public async Task<string[]> GetCSVAsync(Encoding encoding, string path)
{
string[] lines = new string[1];
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultBufferSize, DefaultOptions))
{
using (StreamReader reader = new StreamReader(stream, encoding))
{
string line;
while ((line = await reader.ReadLineAsync()) != null)
{
lines = AddLineToLines(lines, line);
}
}
}
return lines;
}
/// <summary>
/// This code is opensourced.
/// </summary>
/// <param name="linesinarray">lines array</param>
/// <param name="linetoadd">line to add to the lines array</param>
/// <returns>lines array with new value in length</returns>
private string[] AddLineToLines(string[] linesinarray, string linetoadd)
{
if (String.IsNullOrWhiteSpace(linesinarray[0]))
{
linesinarray[0] = linetoadd;
return linesinarray;
}
else
{
string[] temp = new string[linesinarray.Length + 1];
for (int i = 0; i < linesinarray.Length; i++)
{
temp[i] = linesinarray[i];
}
temp[temp.Length - 1] = linetoadd;
return temp;
}
}
//JS Code::
//one attempt::
async function getCSVData() {
try {
var xValue = jsDBConnection.getCSV().then(function (res) {
console.log(res);
});
} catch (e) {
console.log(e.message);
}
}
//Attempt 2::
async function getCSVData() {
try {
var xValue = await jsDBConnection.getCSV();
return xValue;
} catch (e) {
console.log(e.message);
}
}
所有这些调用c#并运行c#方法但是在返回时,promise是挂起的statused并且value是未定义的,然后jquery在infanite循环中运行,直到我暂停执行或终止进程它永远不会返回任何值。
我是异步编程的新手,我觉得我可以让它工作,但我不知道我哪里出错...我需要一些帮助,我要求fto帮我找到我做错了。
谢谢你, 杰西芬德