小编Pou*_*Bak的帖子

C# 的最佳实践。用await传递参数可以吗?

传递参数可以await吗?这样做的优点和缺点是什么?

var results = MapResults(await GetDataAsync());
Run Code Online (Sandbox Code Playgroud)

.net c#

9
推荐指数
2
解决办法
823
查看次数

WebView2 控件未加载 HTML 字符串

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)

c# wpf xaml webview2

9
推荐指数
2
解决办法
2万
查看次数

从.NET Core 2.1迁移到.NET Core 3.1后,发布出现问题

将我的项目从 .NET Core 2.1 迁移到 .NET Core 3.1 后,一切正常,但在发布项目时,出现此错误:

System.Runtime.CompilerServices.Unsafe 不支持 netcoreapp3.1。考虑将 TargetFramework 更新到 netcoreapp3.1 或更高版本。

c# publish nuget-package asp.net-core-3.1

8
推荐指数
2
解决办法
9412
查看次数

如何在 WPF 中初始化 WebView2?

我正在尝试在 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 线程上运行此代码,但当我在另一个线程上调用此方法时,发生了同样的事情。

有人经历过这种行为吗?有任何想法吗?

c# wpf webview2

7
推荐指数
1
解决办法
7554
查看次数

如何在样式表的URL中换行

我有一个样式表,其中的行很长(数据网址)。无论如何,我可以将这些行分成更小的行吗?

长线示例:

background-image: url(data: image/png;base64, really long string);
Run Code Online (Sandbox Code Playgroud)

css url data-uri

5
推荐指数
1
解决办法
463
查看次数

Swift - 使用正则表达式拆分字符串 - 忽略搜索字符串

这里给出了一个聪明的第一个答案,用于使用正则表达式拆分 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"

你可能不需要对原作做太多的调整来工作。

regex nsregularexpression swift4

4
推荐指数
1
解决办法
1911
查看次数

将段落拆分为字符串列表,每个字符串不超过给定的大小并避免将单词分成两半

问题

如何以惯用的方式完成以下操作:将一个大的内容拆分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)

string kotlin

4
推荐指数
1
解决办法
935
查看次数

Microsoft Edge WebView2 - 错误:命名空间“Microsoft”中不存在类型或命名空间名称“Web”

我正在编写这个官方教程:在 WPF (Preview) 中使用 WebView2 入门

  1. 已经安装Microsoft Edge (Chromium) Canary channel在我的Windows 10 pro -ver 1903.
  2. .NET Core 3.1 - WPF在最新版本上创建了一个项目VS2019 - ver16.6.3
  3. 已安装 Nuget 包 Microsoft.Web.WebView2 -Version 0.9.538

但是,根据教程第 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)

问题:错误的原因可能是什么,如何解决?

c# wpf webview2

4
推荐指数
1
解决办法
3431
查看次数

Button.PerformClick() 不等待异步事件处理程序

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)

c# winforms async-await eventhandler

3
推荐指数
1
解决办法
1478
查看次数

匹配字符串的开头或结尾 - 但只指定一次模式

好的,这主要是一个智力问题(或改进)。

我有一个模式必须匹配字符串的开头或结尾(或两者)。

(这里我简单地使用 ' 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)

所以,问题是:

有没有办法匹配字符串的开头或结尾,并且只指定一次内部模式?

c# regex

3
推荐指数
1
解决办法
64
查看次数