小编Goo*_*ber的帖子

.NET 线程池 - WinForms UI 无响应

设想

我有一个 Windows 窗体应用程序。主窗体内部有一个循环,迭代大约 3000 次,在新线程上创建类的新实例来执行一些计算。请记住,此设置使用线程池,当此循环只有大约 100 次迭代(要处理 100 个资产)时,UI 确实保持响应。但一旦这个数字开始大幅增加,UI 就会锁定到 Eggtimer 模式,因此写入表单上列表框的日志将变得不可读。

问题

我是否正确地认为解决此问题的最佳方法是使用后台工作人员?UI 是否锁定,因为即使我使用许多不同的线程(为了速度),UI 本身并不位于其自己的单独线程上?

非常感谢建议的实施。

编辑!!

因此,我们可以说,我决定以 100 个为一组进行批量处理,而不是仅仅发送并排队 3000 个资产进行处理。我将如何有效地做到这一点?我早些时候尝试添加“Thread.Sleep(5000);” 每一批 100 个都被发射之后,但整个事情似乎一团糟......

c# backgroundworker winforms threadpool

2
推荐指数
1
解决办法
3012
查看次数

C#Custom Dictionary Take - 从IEnumerable转换回来

脚本

已经在同一个网站上阅读了一篇关于这个帖子但没有用的帖子,我感觉有点难过,但我确信我之前已经这样做了.

我有一本词典.我想从Dictionary中获取前200个值.

  Dictionary<int,SomeObject> oldDict = new Dictionary<int,SomeObject>();
  //oldDict gets populated somewhere else.
  Dictionary<int,SomeObject> newDict = new Dictionary<int,SomeObject>();
  newDict = oldDict.Take(200).ToDictionary();
Run Code Online (Sandbox Code Playgroud)

显然,take返回一个IENumerable,所以你必须运行ToDictionary()将它转换回相同类型的字典.但是,它只是不起作用,它想要一些随机的键选择器 - 或者什么?我甚至尝试过施展,但无济于事.有任何想法吗?

c# ienumerable dictionary todictionary take

2
推荐指数
1
解决办法
3225
查看次数

C#Console App - OO数学/思考问题

我正在编写一个简单的C#控制台应用程序.

规格是:

一个游戏由十个框架组成,从十个引脚的全机架开始.在每个框架中,您有两个球的交付,在其中可以尽可能多地击倒十个引脚.如果你击倒第一个球上的所有别针,则称为击球.分数不会立即增加,因为对于一次攻击,你可以获得下两个球的值作为奖励.例如,如果您在第一帧中获得一次攻击,然后在第二帧中获得7和1,则第一帧的得分为18(10 + 7 + 1),第二帧的得分为8,总计为26帧后两帧.如果你击倒第一个球上的一些针脚,并击倒第二个球中的其余针脚,它就被称为备用球.同样,得分不会立即增加,因为对于备用,您将获得下一个球的值作为奖励.例如,如果你在第一帧中得到一个备用,比如一个6和一个4,那么在第二帧得到一个8和一个1,那么第一帧得分为18(6 + 4 + 8),而9对于第二帧,在两帧之后总共制作27帧.

我理解如何编写代码等等.但是,我无法理解这个评分系统的最佳方式,我需要一些建议.显然,每个玩家都会创建一个新对象,但是我不知道如何绕过最初看似简单的编程问题.

任何帮助将不胜感激.

问候

c# console-application

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

生成C#长唯一ID

我有一个SQL数据库,其中包含一组具有唯一ID的表.我一直在使用唯一的Identifier数据类型并从我的C#接口传入一个guid.然而,为了查询速度的目的,我已经决定切换到使用bigint并传入很长时间.

什么是每次运行代码时创建唯一long的最简单方法,以便不重复ID?

c# uniqueidentifier long-integer

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

C#将字符串转换为DateTime

我有2个字符串:

string d = "09/06/24";
string t = "13:35:01";
Run Code Online (Sandbox Code Playgroud)

我想取字符串并将它们组合起来制作一个日期时间变量:

newDT = Convert.ToDateTime(d + t);
Run Code Online (Sandbox Code Playgroud)

编译但是当它击中那条线时它会失败..........任何想法?

c# datetime

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

C#Datagridview - 绑定到XML文件时关闭AutoGenerateColumns?

我正在将XML文件绑定到DataGridView.我不希望自动生成列,实际上我想自己生成它们.有没有办法关闭自动生成列功能,并能够以编程方式自己创建列?

c# datagridview autogeneratecolumn

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

SQL Server数据库 - 隐藏字段?

我正在我的silverlight应用程序上实现CRUD,但是我不想以传统方式实现Delete功能,而是我想将数据设置为隐藏在数据库中.

有谁知道使用SQL Server数据库执行此操作的方法?

非常感谢.

sql sql-server database-design hidden-field

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

linq over strings C#

有人可以举例说明如何使用ling查询一长串文本并在该字符串中查找子字符串吗?

问候

c# linq string

0
推荐指数
1
解决办法
3899
查看次数

C#WinForms - 不使用时禁用特定控件?

比方说,我有一个C#Winforms应用程序,它使用带有四个不同标签页的tabcontrol.主窗体上方的此控件上方是一系列组合框,其中包含与每个单独的标签页上运行的不同功能相关的各种按钮和文本框.

如果我使用的是仅使用某些控件的特定标签页,我想禁用其他控件,以便用户不会意外地单击错误的按钮.

示例逻辑:

If(tabpage1.selected)   
{
   button3.Disabled();
}
Run Code Online (Sandbox Code Playgroud)

有谁知道实现这种功能的方法?!

问候,

编辑:

基本上我希望能够禁用组盒!

c# disabled-control winforms

0
推荐指数
2
解决办法
804
查看次数

C#Windows服务

脚本

我已经创建了一个Windows服务,但每当我启动它时,它立即停止.该服务来自一个控制台应用程序,该应用程序用于订阅事件并监视服务器上的进程.如果进程发生任何事情(即它被杀死),那么该事件将触发重新启动进程.我告诉你的原因是因为原来的代码看起来像这样:

原始控制台应用代码:

    static void Main(string[] args)
    {
        StartProcess sp = new StartProcess();
        //Note the readline that means the application sits here waiting for an event!
        Console.ReadLine(); 
    }
Run Code Online (Sandbox Code Playgroud)

现在这段代码已经变成了Windows服务,它基本上就是完全相同的.然而,服务并没有坐在那里等待,即使有readline,它只是结束.....

新的Windows服务代码:

    protected override void OnStart(string[] args)
    {
        ProcessMonitor pm = new ProcessMonitor();
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

思考

由于功能完全封装在这个单独的类中(它完全开始,设置一些事件和等待) - 我怎样才能让服务真正坐在那里等待?它似乎忽略了readline.然而,这完全可以作为控制台应用程序使用,将它作为服务更方便.

c# windows-services

0
推荐指数
1
解决办法
1378
查看次数