小编Tro*_*yen的帖子

如何使用CancellationToken属性?

与上面的RulyCanceler类的代码相比,我想使用运行代码 CancellationTokenSource.

如何在取消令牌中提到它,即不抛出/捕获异常?我可以使用该IsCancellationRequested物业吗?

我试图像这样使用它:

cancelToken.ThrowIfCancellationRequested();
Run Code Online (Sandbox Code Playgroud)

try
{
  new Thread(() => Work(cancelSource.Token)).Start();
}
catch (OperationCanceledException)
{
  Console.WriteLine("Canceled!");
}
Run Code Online (Sandbox Code Playgroud)

但这cancelToken.ThrowIfCancellationRequested();在方法中给出了运行时错误Work(CancellationToken cancelToken):

System.OperationCanceledException was unhandled
  Message=The operation was canceled.
  Source=mscorlib
  StackTrace:
       at System.Threading.CancellationToken.ThrowIfCancellationRequested()
       at _7CancellationTokens.Token.Work(CancellationToken cancelToken) in C:\xxx\Token.cs:line 33
       at _7CancellationTokens.Token.<>c__DisplayClass1.<Main>b__0() in C:\xxx\Token.cs:line 22
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException:
Run Code Online (Sandbox Code Playgroud)

我成功运行的代码在新线程中捕获了OperationCanceledException:

using System;
using System.Threading; …
Run Code Online (Sandbox Code Playgroud)

c# concurrency multithreading synchronization asynchronous

103
推荐指数
5
解决办法
15万
查看次数

如何使用Linq写入Excel电子表格?

我正在编写一个应用程序,我需要从数据库中检索一些行并将它们转储到Excel电子表格中.我正在使用Linq来检索这些行.

是否可以将这些行直接转储到Excel工作表中的对应部分(其中Excel中的一个单元格对应于数据库中的一个单元格)?

c# linq excel interop

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

为什么我的Winforms程序会保留这么多虚拟内存?

我有一个C#/ .NET 4.0应用程序,当我启动时显示两个窗口,其中包含大约十几个控件.当我运行我的程序(调试或发布无关紧要)时,在我甚至做任何事情之前,我在任务管理器/资源监视器中看到我的程序已经有超过450MB的私有内存.我意识到任务管理器不是测量内存使用率最可靠的方法,但它是我用户最明显的方法之一.

当我运行VS2010 .NET内存分配性能分析时,对于我的程序的完整运行,它报告实际分配给托管对象的大约5MB的RAM(我的程序通常也使用一些非托管对象,但它们非常小并且对于简化这项调查我已禁用它们,但没有显着效果).同样,如果我在显示主表单后从psapi.dll调用EmptyWorkingSet(),我的私有内存将降至~3.5 MB.

我已经在这里这里查看了有关内存占用的问题,但这些问题似乎与处理几十兆字节的程序有关.我的程序显示近500MB,看起来更令人担忧.

我无法想象所有这一切都来自开销; 为什么VS Profiler和任务管理器之间存在如此巨大的差异?

更新:有趣的是,如果我注释掉设置ImageLists的InitializeComponent()部分,任务管理器中的数字将保持在10MB以下.我有两套PictureBoxes和ImageLists,其中PictureBox显示四个图像中的一个,具体取决于选中单选按钮组中的哪个单选按钮.

这些代码行似乎会触发大量内存增加:

// 
// directionImageList
// 
this.directionImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("directionImageList.ImageStream")));
this.directionImageList.TransparentColor = System.Drawing.Color.White;
this.directionImageList.Images.SetKeyName(0, "Dir1.png");
this.directionImageList.Images.SetKeyName(1, "Dir2.png");
this.directionImageList.Images.SetKeyName(2, "Dir3.png");
this.directionImageList.Images.SetKeyName(3, "Dir4.png");
// 
// modeImageList
// 
this.modeImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("modeImageList.ImageStream")));
this.modeImageList.TransparentColor = System.Drawing.Color.White;
this.modeImageList.Images.SetKeyName(0, "Mode1.png");
this.modeImageList.Images.SetKeyName(1, "Mode2.png");
this.modeImageList.Images.SetKeyName(2, "Mode3.png");
Run Code Online (Sandbox Code Playgroud)

我正在使用ImageLists,所以我可以使用透明度.模式图像为100x100,每个占用<26KB的磁盘空间.方向图像默认为208x277,磁盘大约为75KB.我知道png是一种压缩格式,但即使在内存中未压缩,我也不会期望这七张图片有数百兆字节.

是否有一些我所知道的低效率,是否有另一种动态显示透明图片的方法?

结论: ImageList类有些东西可疑.有时它会丢失alpha通道,这导致我的程序保留了比它需要的更多内存.它也减慢了最初绘制主窗体的时间(在运行时和在设计器中).

倾倒两个ImageLists使我的程序降低到更健康的10MB RAM.感谢大家的所有建议!

c# memory .net-4.0

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

我可以允许多个程序同时从同一个文件中读取吗?

我有一个应用程序,它读取一组数据文件并执行一些模型计算.程序不需要自己修改数据文件,所以我现在用只读标志打开它们,如下所示:

FILE* file;
if(_wfopen_s(&file, fname.c_str(), L"r") == 0)
...
Run Code Online (Sandbox Code Playgroud)

我希望我的程序的几个实例同时运行,使用相同的数据集,但对数据执行不同的计算.我的程序都不需要修改数据文件.由于数据文件非常大,我无法单独复制数据以用于每个程序.

我假设因为我打开具有只读权限的文件,两个程序可能同时从同一个文件中读取.相反,我得到了各种错误,"文件无法打开,因为它正被另一个进程使用".

由于我的开发环境是Windows 7,因此这个问题表明它可能是启用读取共享的问题.但是,该线程中的所有答案都依赖于CreateFile,而我正在处理使用stdio.h编写的遗留代码.

有没有办法可以使用fopen类函数从文件中同时读取多个程序?

c c++ windows winapi file

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

如何使用正则表达式匹配名称?

我是Python的新手.我想为一些名称检查编写正则表达式.我的输入字符串可以包含az,AZ,0-9和'_',但它应该以az或AZ(不是0-9和'_')开头.我想为此写一个正则表达式.我试过了,但没有什么能完美搭配.

一旦输入字符串遵循正则表达式规则,我就可以继续进行,否则丢弃该字符串.

python regex

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

如何更改PowerShell Cmdlet的默认确认选项?

有没有办法更改High Impact PowerShell脚本的默认确认选项?

当我实现一个Cmdlet并运行它要求确认时

MyPS

Confirm
Are you sure you want to perform this action?    
Performing operation "XYZ" on Target "123".
[Y] Yes [A] Yes to All [N] No [L] No to all [S] Suspend [?] Help (default is "Y"):
Run Code Online (Sandbox Code Playgroud)

如何更改默认值?我想将默认值从"Y"更改为"N".

powershell cmdlets

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

如何使用正则表达式将固定长度的数字与中间的连字符匹配?

我是正则表达式的新手,想知道如何编写执行以下操作的正则表达式:

验证字符串,如123-0123456789.只允许使用数值和连字符.另外,验证连字符前面有3个数字字符,连字符后面有10个字符.

javascript regex

5
推荐指数
2
解决办法
9894
查看次数

使表单的点击"落实"到下面的应用程序

我制作了一个不透明度为30%的表单,我希望这个可以覆盖在我的屏幕上,这样我就可以在其上绘制一个网格,同时仍然可以控制下面的任何程序.所以我希望我用网格创建的表单忽略我的鼠标事件,所以我可以点击下面的程序但仍然显示在顶部.

关于这个的任何想法?

.net c# winforms

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

我可以控制 cmdlet 显示的日期时间格式吗?

我拥有一个带有 DateTime 属性的 cmdlet,该属性表示服务器上事件的时间戳。该 cmdlet 读取服务器上的日志并输出一些信息。由于一堆事件可能在短时间内发生,因此毫秒精度对于输出的用户来说非常重要。

但是,当使用 format-list 或 format-table 时,输出仅显示秒,例如4/15/2015 5:31:30 PM。我更喜欢使用fff 时间格式

我知道实际数据没有四舍五入,因为如果我查询 DateTime 值的 Millisecond 属性,我会看到正确的值。例如,对于给定的输出$event,如果我的日志行具有时间戳2015-04-16T00:31:30.525Z$event.Timestamp.Millisecond则返回 525。

我可以在 cmdlet 中执行某些操作来指定 DateTime 应以毫秒显示吗?例如,当用户输入:

> Get-LogInfo | ft
Run Code Online (Sandbox Code Playgroud)

我想默认显示:

Timestamp              EventData
---------              -------
4/15/2015 17:31:28.525 (data)
Run Code Online (Sandbox Code Playgroud)

我也希望格式列表有类似的行为。理想情况下,cmdlet 用户无需执行任何额外工作即可查看毫秒。

powershell datetime powershell-cmdlet

5
推荐指数
2
解决办法
5469
查看次数

这种无上下文的语法是正则表达式吗?

我的语法定义如下:

A -> aA*b | empty_string
Run Code Online (Sandbox Code Playgroud)

A正则表达式吗?我对如何解释BNF语法感到困惑.

regex bnf context-free-grammar

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