小编tom*_*dox的帖子

如何在 C# Winforms 应用程序中取消执行长时间运行的异步任务

我是一个非常缺乏经验的 C# 程序员,需要帮助来管理我的程序流程。它是一个 WinFormApp,需要多个用户输入,然后使用它们与设备建立串行通信以进行测量。测量采用异步方法进行,运行时间约为 20 分钟。所以我正在使用

    void main()
    {
        //Setup
    }

    private void button1_Click(object sender, EventArgs e)
    {
        await measurements();
        //Plot results
    }

    private async Task measurements()
    {
        while(true){
        //Make some measurements
        await Task.Delay(120000);
        //Make measurements, present data in the UI form.
        //return if done
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我需要制作一个按钮,使用户能够取消测量,以便更改某些输入或参数,然后重新启动测量。所以我添加了一个“取消”按钮。

    private void button7_Click(object sender, EventArgs e)
    {
        textBox64.Enabled = true;
        button6.Enabled = true;
        button5.Enabled = true;
        textBox63.Enabled = true;
        button3.Enabled = true;
        trackBar1.Enabled = true;
        timer.Enabled = true;
        button7.Enabled = false;
        clearData(); …
Run Code Online (Sandbox Code Playgroud)

c# multithreading goto return exception

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

Blazor 中还存在 ViewModel 概念吗?

在回答了这个关于 ViewModel 是否仍然适用于 MVC Core 的问题后,我现在发现自己在 Blazor 中遇到了类似的问题。

我开始构建我的第一个复杂的 Blazor 页面,需要管理很多状态。页面元素将根据在页面其他部分输入的数据显示/隐藏和更新。

我过去曾与 React 和 Redux 合作过,并发现为所有状态拥有一个位置非常有价值,尤其是对于单元测试目的。

因此,我的计划是拥有一个视图模型,它不仅包含我将要保存到数据库中的数据,还包含潜在的标志,例如ShowSalesOrdersPanelif在 razor 视图中的语句中使用的标志。

我的问题是,这个视图模型应该是一个单独的类,还是@functionsBlazor razor 文件的部分实际上是视图模型?我应该用那个代替吗?

blazor

7
推荐指数
2
解决办法
2945
查看次数

ClickOnce是否将移植到.NET Core 3和WinForms?

现在Winforms已被移植到.NET Core 3,将使用什么技术来部署这些应用程序?也可以移植ClickOnce吗?

ClickOnce使用的许多属性当前都存储在.csproj文件中,但是那些项目文件在.NET Framework和.NET Core之间发生了显着变化,因此,大概这需要更改Microsoft的ClickOnce代码才能使其起作用?

微软对此是否有正式消息,我在文档中找不到任何内容?

clickonce winforms .net-core .net-core-3.0

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

Blazor 输入文件组件(文件上传)

我面临一个与用于文件上传的 Blazor 输入文件组件相关的小问题。

来源 - https://github.com/SteveSandersonMS/BlazorInputFile

Component Call - 
  <div class="form-control">
       <InputFile OnChange="HandleFileSelected" />
  </div>
Run Code Online (Sandbox Code Playgroud)

我能够使用此组件成功上传和删除文件。当我上传文件时,文件名显示在组件旁边,如下面的屏幕截图所示。

在此输入图像描述

当我删除文件时,文件已成功删除,但文件名仍然显示在组件旁边。

我希望删除文件后应删除文件名。我尝试了几个选项,但没有运气示例 StateHasChanged();

是否可以只刷新特定组件?如何 ?

有人可以帮忙解决这个问题吗?(我不想使用javascript来实现解决方案)

file-upload asp.net-core blazor blazored blazorinputfile

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

您可以使用 Entity Framework 6 从主键中删除 Identity 吗?

我通过实体框架代码优先创建了一个表,主键设置为自动递增,但现在我想从列中删除该自动递增。我已经尝试使用流畅的 API 做到这一点:

    public class ProductTypeMap: EntityTypeConfiguration<ProductType>
    {
        public ProductTypeMap()
        {
            // This is an enum effectively, so we need fixed IDs
            Property(x => x.ProductTypeId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        }

    }
Run Code Online (Sandbox Code Playgroud)

还有一个注释:

    public class ProductType
    {
        [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ProductTypeId { get; set; }
        public string ProductTypeName { get; set; }

    }
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,它们都生成相同的迁移代码:

    public partial class removeproducttypeidentity : DbMigration
    {
        public override void Up()
        {
            DropPrimaryKey("dbo.ProductTypes");
            AlterColumn("dbo.ProductTypes", "ProductTypeId", c => c.Int(nullable: false));
            AddPrimaryKey("dbo.ProductTypes", "ProductTypeId");
        }
        
        public override void Down()
        {
            DropPrimaryKey("dbo.ProductTypes"); …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework sql-server-2008 entity-framework-6

6
推荐指数
3
解决办法
8134
查看次数

如何使用 System.IO.Abstraction 模拟 FileStream?

我正在尝试使用System.IO.Abstraction项目和 System.IO.Abstraction.TestingHelpers 来模拟FileStream.

这是使用我要测试的文件流的代码:

private readonly IFileSystem _fileSystem;

public void ExtractImageAndSaveToDisk(IXLPicture xlPicture, string filePath)
{
    using (MemoryStream ms = new MemoryStream())
    {
        xlPicture.ImageStream.CopyTo(ms);

        using (FileStream fs = (FileStream)_fileSystem.FileStream.Create(filePath, FileMode.Create))
        {
            ms.CopyTo(fs);
            fs.Flush();
            fs.Close(); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我设置测试的方式:

[TestMethod]
public void CheckFileIsSavedToDisk()
{
    // Arrange
    var mockFileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
    {
        { @"c:\Test\Images\", new MockDirectoryData() },
    });

    var xlPicture = GetXLPicture();
    var filePath = @"c:\Test\Images\myimage.jpeg";

    var sut = new CostSheetImageExtractor(mockFileSystem);

    // Act
    sut.ExtractImagesAndSaveToDisk(xlPicture, filePath);
} …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing

6
推荐指数
1
解决办法
6172
查看次数

VS 2019 和 Visual Studio 安装程序中缺少 .NET Core 的单元测试功能?

我刚刚将 MSTest .NET Core 单元测试项目添加到 VS 2019 中的解决方案中,但现在似乎没有任何功能可用于向该项目添加新的单元测试文件。

缺少“添加”>“单元测试...”上下文菜单选项

重现缺少上下文菜单问题的步骤:

  • 在 Visual Studio 2019 中,将新的“MSTest 项目 (.NET Core)”项目添加到现有解决方案
  • 在解决方案资源管理器中右键单击新测试项目的名称
  • 查看“添加 > 单元测试...”选项是否存在?

我缺少该选项,该选项存在于早期版本的 VS 中(对于针对完整 .NET 框架项目的完整单元测试项目,该选项在 VS2019 中仍然存在):

VS2019 上下文菜单没有“添加 > 单元测试...”选项

缺少单元测试模板

重现缺少单元测试模板问题的步骤:

  • 在 Visual Studio 2019 中,将新的“MSTest 项目 (.NET Core)”项目添加到现有解决方案
  • 在解决方案资源管理器中右键单击新测试项目的名称
  • 选择“添加 > 新项目...”
  • 看看有没有C#相关的测试选项?

我没有看到任何单元测试模板: 添加新项目对话框已过滤以进行测试,但未显示任何结果

我尝试过的

我认为问题可能是我没有为 VS2019 安装单元测试工作负载,但查看 VS2019 的 Visual Studio 安装程序中的“单独组件”选项,“测试工具核心功能”选项似乎也消失了:

VS2019 安装程序没有测试选项

这些是 VS2017 的相同选项以供比较: VS2017 安装程序显示测试工具核心功能选项

我知道“创建单元测试”上下文菜单选项预计不会出现在 VS2019 中,但据我所知,正常的单元测试功能和模板应该存在吗?

(PS:我很感激我可以从头开始编写单元测试,我只是问VS中的功能是否已经改变)

c# unit-testing mstest .net-core visual-studio-2019

6
推荐指数
0
解决办法
5808
查看次数

将服务器端Blazor添加到现有的MVC Core应用程序

我在同一解决方案中有一个完全可操作的Blazor服务器端项目和一个.NET Core 3 MVC项目。我现在正在尝试在我的MVC项目中使用Blazor项目中的组件。

我设法将组件呈现在MVC页面上,但是Blazor组件上的按钮单击不会触发组件的onclick事件,而是直接导航到https:// localhost:44341 /

我不清楚我需要在MVC解决方案中进行哪些更改才能使其正常工作?官方文档讨论了在MVC项目中使用组件的问题,并且与Dan Roth的视频聊天中提到了它,但是都没有详细介绍如何实现。

任何人都可以向我介绍如何将服务器端Blazor改造为MVC项目的完整步骤(或为我提供示例)吗?

我尝试过的

我的Blazor项目仍然具有标准模板的Counter组件,因此我尝试通过引用Blazor项目并将其添加到我的MVC解决方案中,然后将其添加到我的index.cshtml文件中:

<div id="Counter">
  @(await Html.RenderComponentAsync<Counter>())
</div>
Run Code Online (Sandbox Code Playgroud)

可以正确渲染,但单击按钮不起作用。

我已将JS文件添加到MVC应用程序的_Layout页面:

<script src="_framework/blazor.server.js"></script>
Run Code Online (Sandbox Code Playgroud)

在MVC项目的Startup.cs文件中打开“服务器端Blazor”:

services.AddServerSideBlazor();
Run Code Online (Sandbox Code Playgroud)

我还向MVC项目添加了Pages和Shared目录,并复制了_Imports和MainLayout文件-不确定是否需要这样做。

如果这样做没有做,我尝试从所有Blazor模板(客户端,客户端托管和服务器端)中分解新项目以寻找线索,但是所有这些示例都设置为具有单个Blazor的完整SPA。入口点(App文件)托管在.html文件中,而我想在许多不同的现有MVC页面上呈现Blazor组件。

然后,我尝试将这些项目的一部分(以及我的Blazor项目的一部分)添加到MVC项目中,但是无法使其完全正常工作。

我也尝试按照这里的答案进行操作,但这是将Blazor组件文件添加到MVC项目中的工作,而我的Blazor文件当前(大多数情况下)在另一个项目中。

迄今为止我实验中的随机问题

  • 我已经services.AddServerSideBlazor();在MVC应用程序的Startup.cs中添加了。还有什么需要的吗?
  • 我的MVC应用仍然是传统的AspNetCore.Routing,如果仅将组件放在现有的MVC页面上(我将没有Blazor页面,而只有Blazor组件),是否仍需要切换到Core 3的端点路由。
  • 浏览器中运行的blazor javascript文件与之通信的Blazor的服务器端部分是否需要通过端点路由?我从js文件的浏览器中收到404。
  • 如果我只是托管组件,是否仍需要“ App”(App.razor)类/页面作为入口点?
  • 如果是这样,我是否需要将<app>@(await Html.RenderComponentAsync<App>())</app>_Host.cshtml中的行放在我的MVC项目中的某个位置?
  • 我是否需要从我的MVC项目中的Blazor项目中复制Pages和Shared文件夹,以及两个_Imports.razor文件和MainLayout.razor文件?
  • 我认为Blazor现在是Microsoft.NETCore.Platforms文件的一部分(在MVC项目的SDK节点下引用),所以我是否认为我不需要为MVC项目的Blazor添加单独的NuGet包?

c# blazor blazor-server-side

6
推荐指数
1
解决办法
1545
查看次数

Blazor 输入掩码

我想知道是否可以通过继承 InputBase 并最好使用 Regex 来使用 Blazor 进行屏蔽输入?如果仅使用 C# 无法实现,那么 JavaScript 就可以了。我知道 Syncfusion 有付费组件,但我更喜欢免费的东西。任何 GitHub 存储库或指导/提示都很好!

c# blazor

6
推荐指数
2
解决办法
4361
查看次数

“无法读取属性 '_blazorFilesById' of null 错误”与 Blazor InputFile 组件

我已经开始从我的 Blazor WebAssembly 应用程序中收到此错误:

Blazor 应用程序“无法读取空错误的属性‘_blazorFilesById’”

我假设这与我正在使用的InputFile 组件有关,它一直工作正常。

我试过重新启动 VS,清理和重建,重新启动 IIS 并杀死 Chrome 都无济于事。什么可能导致这种情况?

c# blazor blazorinputfile blazor-webassembly

6
推荐指数
1
解决办法
817
查看次数