如何分配一个变量等待CEFSHARP C#中的空隙方法中的变量
这就是我所拥有的:
private async void Button_Click(object sender, EventArgs e)
{
string jsScript1 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript1));
string jsScript2 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript2));
string jsScript3 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript3));
}
如果我想返回结果并处理结果,如何分配变量等待?
我想完成的工作,
private async void Button_Click(object sender, EventArgs e)
{
...
...
...
string jsScript4 = "some java script code";
var task = await Task.WhenAll(chrome.WaitForLoadAsync(),
chrome.EvaluateScriptAsync(jsScript4));
task.ContinueWith(x =>
{
if (!x.IsFaulted)
{
var response = x.Result;
if (response.Success == true)
{
var final = (List<object>)response.Result;
foreach (var el in final)
{
textHtml.Text += el.ToString() + Environment.NewLine;
}
}
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
但是我会遇到错误“不能将空白分配给隐式型变量”,
该如何解决这个问题?
通过使用螺纹。sleep
string jsScript1 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript1));
string jsScript2 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript2));
string jsScript3 = "some java script code";
await Task.WhenAll(chrome.EvaluateScriptAsync(jsScript3));
//Its important to delete "chrome.WaitForLoadAsync()" look above!
Thread.Sleep(2000);
string jsScript4 = "some java script code";
var navigationTask = chrome.WaitForLoadAsync();
var evaluateTask = chrome.EvaluateScriptAsync(jsScript4);
await Task.WhenAll(navigationTask, evaluateTask, evaluateTask.ContinueWith(x =>
{
if (!x.IsFaulted)
{
var response = x.Result;
if (response.Success == true)
{
var final = (List<object>)response.Result;
foreach (var el in final)
{
textHtml.Text += el.ToString() + Environment.NewLine;
}
}
}
}, TaskScheduler.FromCurrentSynchronizationContext()));
如何在不使用thread.sleep的情况下重写此代码的解决方案? 我正在使用chrome.waitforloadasync()
aka“导航任务”,但这与jsscript4
一致,这也许是因为jsscript3 单击链接上的单击使用负载链接,那里没有导航,但是当前页面上的加载链接,也许我需要类似
chrome.waitforloadasync()
for Load Links/load class类
This is what I have:
private async void Button_Click(object sender, EventArgs e)
{
string jsScript1 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript1));
string jsScript2 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript2));
string jsScript3 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript3));
}
How to assign a variable to await if i want to return a result and process it?
What I would like to accomplish
private async void Button_Click(object sender, EventArgs e)
{
...
...
...
string jsScript4 = "some java script code";
var task = await Task.WhenAll(chrome.WaitForLoadAsync(),
chrome.EvaluateScriptAsync(jsScript4));
task.ContinueWith(x =>
{
if (!x.IsFaulted)
{
var response = x.Result;
if (response.Success == true)
{
var final = (List<object>)response.Result;
foreach (var el in final)
{
textHtml.Text += el.ToString() + Environment.NewLine;
}
}
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
But Im getting the error "Cannot assign void to an implicitly-typed variable"
How can i solve this problem?
Solution by using Thread.Sleep
string jsScript1 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript1));
string jsScript2 = "some java script code";
await Task.WhenAll(chrome.WaitForLoadAsync(), chrome.EvaluateScriptAsync(jsScript2));
string jsScript3 = "some java script code";
await Task.WhenAll(chrome.EvaluateScriptAsync(jsScript3));
//Its important to delete "chrome.WaitForLoadAsync()" look above!
Thread.Sleep(2000);
string jsScript4 = "some java script code";
var navigationTask = chrome.WaitForLoadAsync();
var evaluateTask = chrome.EvaluateScriptAsync(jsScript4);
await Task.WhenAll(navigationTask, evaluateTask, evaluateTask.ContinueWith(x =>
{
if (!x.IsFaulted)
{
var response = x.Result;
if (response.Success == true)
{
var final = (List<object>)response.Result;
foreach (var el in final)
{
textHtml.Text += el.ToString() + Environment.NewLine;
}
}
}
}, TaskScheduler.FromCurrentSynchronizationContext()));
How to rewrite this code without using Thread.Sleep?
Im using chrome.WaitForLoadAsync()
aka "navigation task" but this does not work at line with jsScript4
, maybe because in jsScript3
clicks on link with load links, there is no navigation there, but loads links on current page, maybe i need class like chrome.WaitForLoadAsync()
for load links/load classes
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您只需将任务存储为变量,然后在等待任务后访问其结果属性。
You simply store the task as a variable and access it's Result property after the await Task.WhenAll call.
的结果等待任务。Whenall(...)
是无效的,因此您应该等待其他东西 :)result of
await Task.WhenAll(...)
is void, so you should await something else :)