Ich habe eine C# WinForms -Anwendung, die den WebView2 -Browser verwendet. Das Formular enthält ein Netz und eine Browseransicht. Wenn ein Benutzer die ausgewählte Zeile im Raster ändert, werden neue Daten abgerufen und eine HTML -Datei basierend auf diesen Daten generiert. Der WebView2 -Browser navigiert dann zur neuen Datei -URL, um den aktualisierten Inhalt anzuzeigen. Für jede Zeilenwechsel treten zwei Navigationen auf: < /p>
Navigieren Sie zu etwa: leer < /code> < /li>
Navigieren Sie zu der generierten HTML -Datei < /li>
< /ol>
Dieser Ansatz hat für die letzten zwei Jahre gut funktioniert. In einigen jüngsten Setups haben wir jedoch festgestellt, dass beide Navigationen (bis etwa: leer und die Datei -URL) fast gleichzeitig auftreten. Infolgedessen wird die Navigation zur tatsächlichen Datei -URL abgebrochen, während die Navigation zu etwa: Blank erfolgreich ist.
Code: Select all
private void NavigateToBlankThenFileAsync()
{
webView2.CoreWebView2.Navigate("about:blank");
var fileUrl = GetHTMLDataAndWriteItIntoFile();
webView2.CoreWebView2.Navigate(fileUrl);
}
Um das
Problem zu mildern, habe ich die Logik geändert, um die About zu erstellen: Blank Navigationssynchron - Warten auf die Navigation, bevor die tatsächliche Dateinavigation ausgelöst wird.
Code: Select all
private TaskCompletionSource navigationCompletedTask;
// Call this function when you want to trigger navigation
private async Task NavigateToBlankThenFileAsync()
{
navigationCompletedTask = new TaskCompletionSource();
// Navigate to about:blank
webView2.CoreWebView2.Navigate("about:blank");
// Await navigation to about:blank before proceeding
await navigationCompletedTask.Task;
var fileUrl = GetHTMLDataAndWriteItIntoFile();
// Now safe to navigate to actual file URL
webView2.CoreWebView2.Navigate(fileUrl);
}
// Event handler for navigation completed
private void WebView2_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
{
var uri = webView2.Source?.ToString();
if (uri == "about:blank" && navigationCompletedTask != null)
{
navigationCompletedTask.SetResult(true);
navigationCompletedTask = null;
}
}
Frage: Ist dies der richtige Ansatz, um eine verlässliche sequentielle Navigation in WebView2 zu gewährleisten? Verhalten?
Vorschläge oder Feedback zu dieser>
Ich habe eine C# WinForms -Anwendung, die den WebView2 -Browser verwendet. Das Formular enthält ein Netz und eine Browseransicht. Wenn ein Benutzer die ausgewählte Zeile im Raster ändert, werden neue Daten abgerufen und eine HTML -Datei basierend auf diesen Daten generiert. Der WebView2 -Browser navigiert dann zur neuen Datei -URL, um den aktualisierten Inhalt anzuzeigen. Für jede Zeilenwechsel treten zwei Navigationen auf: < /p>
Navigieren Sie zu etwa: leer < /code> < /li>
Navigieren Sie zu der generierten HTML -Datei < /li>
< /ol>
Dieser Ansatz hat für die letzten zwei Jahre gut funktioniert. In einigen jüngsten Setups haben wir jedoch festgestellt, dass beide Navigationen (bis etwa: leer und die Datei -URL) fast gleichzeitig auftreten. Infolgedessen wird die Navigation zur tatsächlichen Datei -URL abgebrochen, während die Navigation zu etwa: Blank erfolgreich ist.[code]private void NavigateToBlankThenFileAsync()
{
webView2.CoreWebView2.Navigate("about:blank");
var fileUrl = GetHTMLDataAndWriteItIntoFile();
webView2.CoreWebView2.Navigate(fileUrl);
}
[/code]
Um das [url=viewtopic.php?t=20324]Problem[/url] zu mildern, habe ich die Logik geändert, um die About zu erstellen: Blank Navigationssynchron - Warten auf die Navigation, bevor die tatsächliche Dateinavigation ausgelöst wird.
[code]private TaskCompletionSource navigationCompletedTask;
// Call this function when you want to trigger navigation
private async Task NavigateToBlankThenFileAsync()
{
navigationCompletedTask = new TaskCompletionSource();
// Navigate to about:blank
webView2.CoreWebView2.Navigate("about:blank");
// Await navigation to about:blank before proceeding
await navigationCompletedTask.Task;
var fileUrl = GetHTMLDataAndWriteItIntoFile();
// Now safe to navigate to actual file URL
webView2.CoreWebView2.Navigate(fileUrl);
}
// Event handler for navigation completed
private void WebView2_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
{
var uri = webView2.Source?.ToString();
if (uri == "about:blank" && navigationCompletedTask != null)
{
navigationCompletedTask.SetResult(true);
navigationCompletedTask = null;
}
}
[/code]
[b] Frage: [/b] Ist dies der richtige Ansatz, um eine verlässliche sequentielle Navigation in WebView2 zu gewährleisten? Verhalten?
Vorschläge oder Feedback zu dieser>