小编Hen*_*man的帖子

在C#中将DataGridView DataSource设置为DataTable的速度很慢

我有一个DataTable,完全填充,我想设置为DatagridView:

gdv.DataSource = dt;
Run Code Online (Sandbox Code Playgroud)

然而,这非常缓慢.DataTable的填充速度非常快,但上面这一行需要很长时间.有没有办法加快速度或在另一个线程中执行它?

在这一点之后没有互动.只是上面的简单陈述!

谢谢.

c# datatable datagridview backgroundworker winforms

3
推荐指数
2
解决办法
6894
查看次数

我如何测试Relaycommand?

我正在阅读这篇关于MVVM的
MSDN文章.我现在正在看图#15中的RelayCommand.假装我想测试这个SaveCommand.我该怎么办?我正在使用NUnit和Rhino Mocks 3.6

c# wpf rhino-mocks mvvm relaycommand

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

如何更改此循环以不使用继续?

我使用continue语句来创建这个简单的程序并获得所需的输出.

for(m=1;m<=3;m++)
{
   for(n=1;n<=2;n++)
   {
      if(m==n)
         continue;
      cout<<m<<" "<<n<<endl;
   }
}
Run Code Online (Sandbox Code Playgroud)

输出:

1  2
2  1
3  1
3  2
Run Code Online (Sandbox Code Playgroud)

现在我想要它而不使用coninue语句.有什么方法可以做到吗?

c++

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

如何在C#中的一个循环中重命名多个按钮

我有一个类似战舰的程序,其中有一个10 x 10的网格按钮。在程序开始时,我希望所有按钮的文本都更改为“ ---”,这表明没有人在该坐标处射击。我似乎找不到一种在一个循环中重命名所有按钮的方法。所有按钮的名称均为b00,b01,b02 ...,显示其坐标。第一个数字是行,第二个数字是列。(即b69代表第7行,第10列)。

希望能对您有所帮助!

先感谢您!

路加

c# text loops button winforms

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

C# 面板列表

我想创建包含有关项目的详细信息的面板(包括左侧的缩略图),然后将它们添加到可滚动列表中。很像 iPhone 上的 iTunes 显示可用应用程序列表的方式。

我已经做了一些搜索,但到目前为止还没有找到任何帮助。

有没有人有任何想法或链接到他们想与我分享的样本。

提前致谢,罗布

c# list panel winforms

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

C#中的Image.FromStream()

我在VS 2010,.Net 4.0工作.在Windows窗体应用程序中,这没关系:

Image img = Image.FromStream(imagePart.GetStream());
Run Code Online (Sandbox Code Playgroud)

但是,在Wpf应用程序中,Image类来自System.Windows.Controls,这是无效的,因为它没有FromStream方法的定义.在Windows窗体中,Image类是System.Drawing.Image.

有没有办法在Wpf应用程序中使用FromStream?

c# wpf image

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

在组合框中选择最后添加的列表项

我使用组合框,不受 C# 中数据源的限制。

cmbBox.Items.Add("apple");
cmbBox.Items.Add("orange");
cmbBox.Items.Add("banana");
Run Code Online (Sandbox Code Playgroud)

现在我想将 SelectedIndex 设置为最终添加“banana”,但不能使用 cmbBox.SelectedIndex = cmbBox.Items.count -1; 因为组合框已排序!

请问有什么提示吗?

c# combobox winforms

3
推荐指数
2
解决办法
8548
查看次数

如何在客户端更新 Blazor Server 应用程序的服务器端更改?

我的ChangeValues服务器端事件每 5 秒发生一次,但在客户端,我只看到number变量的第一个值。见下面的代码

@page "/"
<button class="btn btn-primary" @onclick="ChangeValues">Click me</button>
<b>@number</b>
@code {
    double number;
    private Random rnd = new Random();
    private System.Threading.Timer _timer;
    void ChangeValues()
    {
        number = rnd.NextDouble();
        Console.WriteLine(number);
    }
    private void DoWork(object state)
    {
        ChangeValues();
    }
    protected override async Task OnInitializedAsync()
    {
        _timer = new System.Threading.Timer(DoWork, null, TimeSpan.Zero, 
            TimeSpan.FromSeconds(5));
    }
}
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side

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

Blazor WebAssembly:如何在长时间运行的非异步进程中更新 UI

我有一些复杂的计算需要一段时间才能完成。(是的,我知道,客户端听起来可能不是执行它们的理想场所,但有充分的理由。)我希望页面随着计算的进行而更新结果。随着计算的进行,我可以让 UI 重新渲染,但不能正确更新结果。

请注意,计算本身并不是异步的,将它们包装起来Task.Run似乎没有帮助。这是演示问题的代码的简化版本:

@page "/AsyncTest"

<button type="button" class="btn btn-primary" @onclick="@(e => RunOnClick(e))">Run</button>
<br />
<div>Percent Complete = @PercentComplete %</div>

@code {
    private int PercentComplete = 0;

    private async Task RunOnClick(MouseEventArgs e) {
        for (PercentComplete = 0; PercentComplete < 100; PercentComplete += 20) {
            System.Console.WriteLine($"LongCalculation: PercentComplete = {PercentComplete}");

            await Task.Run(() => Calculation()); // Does not work.
            //await CalculationAsync();          // This works.

            StateHasChanged();
        }
    }

    private void Calculation() => System.Threading.Thread.Sleep(500);
    private async Task CalculationAsync() => await Task.Delay(500); …
Run Code Online (Sandbox Code Playgroud)

async-await blazor blazor-client-side

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

Blazor wasm 中的多线程

我正在使用 Blazor WASM 开发简单的在线游戏。最近我发现 Blazor 客户端是单线程的,这对于我的大多数算法来说都是灾难性的。我想实现比权威服务器更好的架构,并能够在客户端运行代码(用于滞后补偿等......)。各框架在线交流的思路如下:

  1. 当客户端连接时,它会收到有关游戏状态的所有信息(没有问题)
  2. 当客户端执行某些操作(移动、射击...)时,它会向服务器发送有关该操作的信息
  3. 服务器每帧收集所有收到的操作并将其发送给所有客户端
  4. 客户端执行服务器发送给他们的所有操作。
  5. 客户端和服务器对每一帧执行所有游戏算法

因此,在客户端,基本上有三个线程 - 第一个用于在按下按键时向服务器发送操作,第二个用于从服务器接收消息,第三个用于执行游戏代码。正如你所看到的,一个线程对我来说是不够的:D

附加信息 - 在线通信是通过 SignalR 实现的。

我知道 .net 8 中可以实现多线程(但遗憾的是我等不及了)。我尝试过预发布,但没有运行。

非常感谢任何帮助或提示;)

提供代码以便更好地理解。

//Executed 60 per second
private async Task Frame()
{
    //serialization of actions
    json = JsonConvert.SerializeObject(myActions);
    Task.Run(() => hubConnection.SendAsync("ExecuteList", json, id)); //still 
    the same thread
    myActions.Clear();
    ToolsGame.ProceedFrame(gvars, now);
    StateHasChanged();  
}
Run Code Online (Sandbox Code Playgroud)

SignalR 监听来自服务器的消息:

hubConnection.On<string>("ExecuteList", (actionMethodNamesJson) =>
{
        ExecuteList(actionMethodNamesJson); //deserialize actions from all clients
        StateHasChanged();
});
Run Code Online (Sandbox Code Playgroud)

multithreading blazor blazor-webassembly

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