传递参数可以await吗?这样做的优点和缺点是什么?
var results = MapResults(await GetDataAsync());
Run Code Online (Sandbox Code Playgroud) WebView2控件:如下所示,HTML 字符串通过事件内的NavigateToString(...)Button_Click(...)调用成功加载。但我需要在加载Window和/或其Grid加载后立即加载 HTML 字符串。MainWindow(){...}但是构造函数内或事件内的以下代码rootGrid_Loadded(...)会引发如下错误:
问题:我们怎样才能解决问题并在加载或HTML string后立即加载?或者有更好的解决方案/解决方法吗?WindowGrid
主窗口.xaml:
<Window x:Class="WpfWebView2TEST.MainWindow"
.....
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Style="{StaticResource CustomWindowStyle}"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button x:Name="btnTest" Content=Test" Click="btnTest_Click"/>
<wv2:WebView2 Name="MyWebView" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
注意:在以下构造函数中调用 MyLoadHTMLString() 或rootGrid_Loaded(...)事件会引发如下错误:
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyLoadHTMLString();
}
........
}
private void rootGrid_Loaded(object sender, RoutedEventArgs e)
{
MyLoadHTMLString();
}
public void MyLoadHTMLString() …Run Code Online (Sandbox Code Playgroud) 将我的项目从 .NET Core 2.1 迁移到 .NET Core 3.1 后,一切正常,但在发布项目时,出现此错误:
System.Runtime.CompilerServices.Unsafe 不支持 netcoreapp3.1。考虑将 TargetFramework 更新到 netcoreapp3.1 或更高版本。
我正在尝试在 WPF 应用程序中使用 WebView2。我在文档和其他帖子中读到,我应该调用EnsureCoreWebView2Async()或设置Source属性才能初始化 WebView。如果我设置Source,它会正确加载网页,但我不能这样做,因为我的html内容在内存中(并且不允许写入磁盘)。
于是我尝试调用初始化方法:
var webView = new WebView2();
webView.NavigationCompleted += Navigation_Completed;
webView.Initialized += new EventHandler((object sender, EventArgs e) => {
webView.NavigateToString(myHtml);
});
await webView.EnsureCoreWebView2Async(null);
Run Code Online (Sandbox Code Playgroud)
此代码的运行被该EnsureCoreWebView2Async()方法阻止。我什至可以等待一分钟,但什么也没有发生,它只是卡在初始化中。没有异常,没有错误信息。我在 UI 线程上运行此代码,但当我在另一个线程上调用此方法时,发生了同样的事情。
有人经历过这种行为吗?有任何想法吗?
我有一个样式表,其中的行很长(数据网址)。无论如何,我可以将这些行分成更小的行吗?
长线示例:
background-image: url(data: image/png;base64, really long string);
Run Code Online (Sandbox Code Playgroud) 这里给出了一个聪明的第一个答案,用于使用正则表达式拆分 swift 字符串
但是,它将搜索的文本保留在答案数组中。我正在尝试做类似的事情,但忽略充当分隔符的字符(例如,就像 swift split 函数一样,但只是使用正则表达式作为分隔符)。
例如:正则表达式将类似于
"\\\||Z|ZY"
Run Code Online (Sandbox Code Playgroud)
当应用于 string of "hi|thisZshouldZYbe|separated"then 你会得到一个数组
["hi", "this", "should", "be", "separated"]
Run Code Online (Sandbox Code Playgroud)
注意。正则表达式适用于带有双重转义的 swift NSRegularExpression 格式。在常规正则表达式中,它只是 "\||Z|ZY" 另外注意,正则表达式包含垂直线符号而不是字母 "l"
你可能不需要对原作做太多的调整来工作。
问题
如何以惯用的方式完成以下操作:将一个大的内容拆分String为一个列表String,每个列表不超过给定的大小,并避免将单词分成两半。
最接近的解决方案String.chunked()(拆分单词)
最接近的解决方案是使用 String 类的chunked()方法。然而,这样做的问题是它会分割给定的单词String。
使用的代码示例String.chunked()
val longString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod " +
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, " +
"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " +
"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " +
"cillum dolore eu fugiat …Run Code Online (Sandbox Code Playgroud) 我正在编写这个官方教程:在 WPF (Preview) 中使用 WebView2 入门。
Microsoft Edge (Chromium) Canary channel在我的Windows 10 pro -ver 1903..NET Core 3.1 - WPF在最新版本上创建了一个项目VS2019 - ver16.6.3。但是,根据教程第 3 步中的说明,当我xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"在<Window/>标记中添加命名空间MainWindow.xaml并构建 (F5) 应用程序时,我using Microsoft.Web.WebView2.Wpf;在MainWindow.g.cs文件行收到以下错误:
错误:
错误 CS0234 命名空间“Microsoft”中不存在类型或命名空间名称“Web”(您是否缺少程序集引用?)
主窗口.xaml:
<Window x:Class="WpfWebView2TEST.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
问题:错误的原因可能是什么,如何解决?
PerformClick我在用于调用事件处理程序的 Windows 窗体应用程序中遇到问题async。事件处理程序似乎没有,await而是立即返回。我创建了这个简单的应用程序来显示问题(它只是一个带有 3 个按钮的表单,很容易自己测试):
string message = "Not Started";
private async void button1_Click(object sender, EventArgs e)
{
await MyMethodAsync();
}
private void button2_Click(object sender, EventArgs e)
{
button1.PerformClick();
MessageBox.Show(message);
}
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show(message);
}
private async Task MyMethodAsync()
{
message = "Started";
await Task.Delay(2000);
message = "Finished";
}
Run Code Online (Sandbox Code Playgroud)
message这里有趣的问题是,当我点击 时,你认为会显示什么Button2?
令人惊讶的是,它显示“开始”,而不是您所期望的“完成”。换句话说,它不会await MyMethod(),它只是启动任务,然后继续。
编辑:
在这个简单的代码中,我可以通过直接从 Button2 事件处理程序调用来使其工作await Method(),如下所示:
private async void button2_Click(object …Run Code Online (Sandbox Code Playgroud) 好的,这主要是一个智力问题(或改进)。
我有一个模式必须匹配字符串的开头或结尾(或两者)。
(这里我简单地使用 ' abcd' 作为模式,但在现实世界中,这是一个相当长且复杂的模式。但这并不有趣,因为它有效)。
像往常一样,我使用这个正则表达式:
@"^abcd|abcd$"
Run Code Online (Sandbox Code Playgroud)
在这里,模式被复制,一次用于开始,一次用于字符串的结尾。
但是,由于模式又长又复杂,我只想在 string 中指定一次。这将有助于阅读和维护——我只有一个地方可以改变。
以下正则表达式当然不起作用,但可以让我了解我想要什么:
@"^abcd$" - matches only 'abcd' exact
@"^?abcd$?" - matches also 'abcd' in the middle
Run Code Online (Sandbox Code Playgroud)
所以,问题是:
有没有办法匹配字符串的开头或结尾,并且只指定一次内部模式?