Rank: Newbie Groups: Member
Joined: 5/18/2024 Posts: 2
|
Hello, I call a streaming API, which returns the content almost byte by byte. I then pass this to the WebView and call the method LoadHtmlAndWait. The disadvantage is that this method completely reloads the content each time. Is there a way to pass the content to the WebView piece by piece without reloading the entire content each time? Here is a code snippet:
[ ... ] using (HttpClient httpClient = new HttpClient()) { using (var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead)) { response.EnsureSuccessStatusCode();
using (var stream = await response.Content.ReadAsStreamAsync()) using (var reader = new System.IO.StreamReader(stream, Encoding.UTF8)) { char[] buffer = new char[8]; int bytesRead;
string responseText = string.Empty; while ((bytesRead = await reader.ReadAsync(buffer, 0, buffer.Length)) > 0) { WebCtrl.WebView.LoadHtmlAndWait(responseText +=new string(buffer, 0, bytesRead)); } } } } [ ... ]
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,217
|
Hi, Yes. You would need to implement a custom resource loader. See here for more details on how to implement a custom resource handler: https://www.essentialobjects.com/doc/webbrowser/advanced/resource_handler.htmlAfter you register your custom resource handler, you would need to use LoadUrlAndWait with a fake Url instead of using LoadHtmlAndWait. The fake Url would be passed to your resource handler and is up to your resource handler to interpret. The Url instead of the HTML flavor must be used because only the Url flavor would trigger the resource handler. The custom resource handler interface does not directly support async model. However you can have your own code inside a separate async function and then wait for that function to complete inside your resource handler's Process method. Hope this helps. Please feel free to let us know if you have any more questions. Thanks!
|