小编Dav*_*len的帖子

如何中止.NET任务?

在这种情况下,我正在编写代码战争竞赛的框架.当代码运行时,对于每个回合,它调用每个参赛者提供的库中的方法.比赛的规则是方法必须在1秒内返回,否则我们就会杀死调用它们的任务.然后我们使用该转弯的默认结果.

该方法不支持取消,因为我们不能信任被调用的代码来响应取消.我们需要杀死线程,因为如果我们有10或20个被忽略的后台任务,那么所有前进的调用将在每次调用时提供更少的时钟周期,并且之前花费不到1秒的方法现在需要更多.

从好的方面来说,我们要杀死的方法应该没有资源打开等等,所以中止不应该留下任何东西.

更新:这里要记住两件事.首先,这就像一场比赛 - 所以表现很重要.其次,工作线程不太可能打开任何资源.如果其中一个被调用的方法过度,我需要中止它并继续快速前进.

.net c# task abort task-parallel-library

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

创建一个ASP.NET Web应用程序作为Office 365任务窗格AddIn

尽管C#和其他语言被列为可能的语言,但我发现的所有示例都显示了如何仅使用HTML5/JavaScript创建任务窗格AddIn.

我已经完成了所有这些:

和其他人一样,他们都是HTML5/JavaScript!甚至MSDN样本也只是HTML5/JavaScript!

如何让ASP.NET Web应用程序与Office 365通信,以便它可以提供任务窗格控件并编辑所选文本?

c# asp.net office365 office365-apps

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

为什么File.Exists("c:\ filename.txt /")返回true?

对于文件C:\filename.txt,

File.Exists(@"c:\filename.txt/"); 
Run Code Online (Sandbox Code Playgroud)

回报true.但是当我们尝试使用该文件名打开时,它会失败.

由于尾随/,文件名很糟糕.但是,我们如何测试以确定文件是否有效,因为这告诉我它不仅可以,而且文件存在.

更新:在标准命令行测试应用程序中,结果符合预期(false).但在我的 自定义uri处理程序中,File.Exists()返回true.这真的很奇怪.

.net c# file-io

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

从List <>中获取单个随机元素的最佳方法是什么?

我需要从列表中获取一个随机元素(这不是列表中的两个值).以下工作正常:

Company dest = companies
    .Where(cpy => cpy != src && cpy != plyr.PowerUpInAction.Passenger.Destination)
    .OrderBy(pu => rand.Next())
    .ToList()[0];
Run Code Online (Sandbox Code Playgroud)

有更好的(即更有效的)方法吗?转换为列表让我感到额外的工作.

谢谢 - 戴夫

.net linq

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

如何转换为对象可能实现的接口?

我有以下类和接口:

export interface IBody {
    body : ListBody;
}

export class Element  {
// ...
}

export class Paragraph extends Element implements IBody {
// ...
}

export class Character extends Element {
// ...
}
Run Code Online (Sandbox Code Playgroud)

我有代码,我将获得一个Element派生对象数组(不仅仅是段落和字符).在实施IBody的情况下,我需要对身体中的元素采取行动.

查看它是否实现IBody的最佳方法是什么?是"if(element.body!== undefined)"吗?

然后我如何访问它?"var bodyElement = <IBody> element;" 给了我一个错误.

C:/src/jenova/Dev/Merge/AutoTagWeb/client/layout/document/elements/factory.ts(34,27): error TS2012: Cannot convert 'Element' to 'IBody':
    Type 'Element' is missing property 'body' from type 'IBody'.
    Type 'IBody' is missing property 'type' from type 'Element'.
Run Code Online (Sandbox Code Playgroud)

谢谢 - 戴夫

interface typescript

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

如果我们有网络工作者,我们可以假设哪个版本的ECMAScript?

我们正在创建一个使用Web worker的javascript客户端应用程序.我们只会在支持Web worker的浏览器上运行.

我们可以假设这些浏览器支持哪种版本的ECMAScript?他们都支持第5版吗?

javascript browser

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

设置SVG文件的大小(通过Batik)

如果我渲染到位图,则位图具有特定数量的像素和DPI.这种组合可以很容易地绘制一个1"x 1"的正方形 - 我为DPI像素长的每一边渲染线条.

当我创建一个SVG时,我认为它仍然可以这样设置.我设置每英寸的单位,以及整个对象的单位大小.是的,您可以放大SVG文件,因为它是所有向量,但它仍然应该有100%的缩放大小来渲染.

在我的情况下,我正在为我的单位使用EMU.所以914400单位/英寸.问题#1是,如何使用Batik设置缩放比例.对于位图,它是:

AffineTransform scaleToEmus = AffineTransform.getScaleInstance(dpi / (float) DrawingSurface.EPI, dpi / (float) DrawingSurface.EPI);
graphics.transform(scaleToEmus);
Run Code Online (Sandbox Code Playgroud)

但是SVG没有dpi等价物.

然后对于EMU中的给定宽度和高度,我是否使用以下方法设置图像的大小(或最大范围):

svgGraphics.setSVGCanvasSize(new Dimension(width, height));
Run Code Online (Sandbox Code Playgroud)

我想我还没有完全理解SVG,或者至少是Batik,因为我没有看到如何将单位设置为100%缩放渲染.

svg batik

5
推荐指数
0
解决办法
417
查看次数

如何保存带有嵌入图像的网页

我知道如何在网页中嵌入图像。那不是我的问题。

我的问题是对于包含图像的网页,以正常方式包含图像,作为指向不同 jpg 文件的链接,如何将其保存在创建单个 html 文件的位置,其中图像被转换为​​嵌入在 html 中的图像?

html image

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

使任务成为孤儿有什么缺点吗?

当我们的应用程序正在从数据库或 http 请求中读取一些数据并且用户点击取消按钮时,我希望能够立即取消从数据库或 http 请求中读取。这两个调用都不能立即取消,即使对于调用的异步版本也是如此。

如果我将代码设置为在下一个数据库/http 调用完成后立即结束任务怎么办?然后忘记那个任务并继续在我的应用程序中?我可以看到的一个缺点是如果在用户存在应用程序之前任务没有完成。

更新: JPVenson 为 http 和 ADO.NET 提供了一个很好的解决方案。但是,我们有时也会调用 Salesforce API,据我所知,它没有取消机制。所以这个问题仍然存在。

在取消时,我不需要返回的内容,因此从我的应用程序的角度来看,我可以忘记任务。这样做有什么缺点吗?

.net task cancellationtokensource

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

尝试在 Blazor 中使用 serilog-sinks-azureblobstorage

更新: 我这里有一个非常简单的例子。既不工作File也不AzureBlobStorage工作。此外,如果AzureBlobStorage设置了,它会在尝试加载时遇到异常Blazor_Logger_bug.styles.css- 这解释了为什么启用此功能时页面无法呈现。

我已经转而编写自己的记录器(比我尝试使用 Serilog 花费的时间更少)。但想警告其他人,它似乎不起作用,并会在您的应用程序中导致不相关的问题。


我在 Blazor 服务器应用程序中使用此功能(Serilog 到文件接收器工作正常)时遇到各种问题。

如果我设置如下:

var _logger = new LoggerConfiguration()
    .ReadFrom.Configuration(config)
    .CreateLogger();
Log.Logger = _logger;
builder.Logging.AddSerilog(Log.Logger);
Run Code Online (Sandbox Code Playgroud)

然后它会成功记录到 Azure BLOB。但我有以下问题:

  1. 应用程序的页面显示空白。页面源是 _Host.cshtml,没有两个 <component> 节点(这就是一切)。

如果我设置如下:

builder.Logging.AddSerilog();
Run Code Online (Sandbox Code Playgroud)

然后网页就可以正常显示了。但我有以下问题:

  1. Azure BLOB 中未记录任何内容。

如果我将其设置如下:

builder.Host.UseSerilog((hostingContext, loggerConfiguration) =>
{
    loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration);
});
Run Code Online (Sandbox Code Playgroud)

然后网页就可以正常显示了。

但我有以下两个问题:

  1. Azure BLOB 中未记录任何内容。
  2. 控制台和调试日志记录没有任何内容。我认为是因为这取代了当时设置的日志记录。

完整的相关代码是:

if (builder.Environment.IsDevelopment())
{
    builder.Logging.ClearProviders();
    builder.Logging.AddJsonConsole();
    builder.Logging.AddDebug();
}
builder.Logging.AddSerilog();
Run Code Online (Sandbox Code Playgroud)

相关配置是:

"Serilog": {
    "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.AzureBlobStorage" ],
    "MinimumLevel": {
        "Default": "Warning",
        "Override": { …
Run Code Online (Sandbox Code Playgroud)

serilog blazor blazor-server-side serilog-aspnetcore serilog-sinks-azureblobstorage

5
推荐指数
0
解决办法
216
查看次数