小编Inv*_*ion的帖子

如何在迭代时从通用列表中删除元素?

我正在寻找一个更好的模式来处理每个需要处理的元素列表,然后根据结果从列表中删除.

你不能.Remove(element)在里面使用foreach (var element in X)(因为它导致Collection was modified; enumeration operation may not execute.异常)...你也不能使用for (int i = 0; i < elements.Count(); i++),.RemoveAt(i)因为它会扰乱你在集合中的当前位置i.

有一种优雅的方式来做到这一点?

c# generics loops list key-value

418
推荐指数
15
解决办法
35万
查看次数

如何在文件版本更改中保留.settings/.config文件中的更改?

我创建了一个应用程序,它使用settings.settings来存储一些用户特定的设置(scope = User).设置在启动时正确加载,在使用过程中更改并正确保存以供下次启动.这个循环似乎没有问题.

当我更新新版本的程序集和文件版本时,会出现问题.启动时不再加载设置(而是使用默认值).即使启动版本1.2并且生成并保存了新的配置文件(即,您可以重新启动版本1.1并且配置文件将是从该文件保存的配置文件),似乎从版本1.1保存的配置文件将保持不变.版).

因此,设置似乎特定于程序集和/或文件的版本.值得注意的是,在版本1.1和版本1.2之间没有对settings.settings文件或其他任何内容进行任何更改(即我在这些不同版本之间进行的唯一更改是修改版本号).

有没有办法在版本更改后保留这些设置?

.net c# settings.settings

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

如何将文件上传到大于5 MB(大约)的Amazon S3(官方SDK)?

我使用最新版本的官方Amazon S3 SDK(1.0.14.1)来创建备份工具.到目前为止,如果我上传的文件大小低于5 MB,一切正常,但当任何文件大于5 MB时,上传失败,并出现以下异常:

System.Net.WebException:请求已中止:请求已取消.---> System.IO.IOException:在写入所有字节之前无法关闭流.在System.Net.ConnectStream.CloseInternal(布尔内部调用,布尔中止)---内部异常堆栈跟踪结束---在Amazon.S3.AmazonS3Client.ProcessRequestError(字符串actionName,HttpWebRequest请求,WebException we,HttpWebResponse errorResponse,String requestAddr ,WebSeaderCollection&respHdrs,类型t)在Amazon.S3.AmazonS3Client.PutObject(PutObjectRequest请求)的Amazon.S3.AmazonS3Client.Invoke [T](S3Request userRequest)处于W的BackupToolkit.S3Module.UploadFile(String sourceFileName,String destinationFileName):\code\AutoBackupTool\BackupToolkit\S3Module.cs:BackupToolkit.S3Module的第88行.

注意:5 MB大致是失败的边界,它可以略低或更高

我假设连接超时,并在文件上载完成之前自动关闭流.

我试图找到一种设置长超时的方法(但我找不到其中的选项AmazonS3AmazonS3Config).

关于如何增加超时的任何想法(如我可以使用的应用程序范围设置)还是与超时问题无关?


码:

var s3Client = AWSClientFactory.CreateAmazonS3Client(AwsAccessKey, AwsSecretKey);

var putObjectRequest = new PutObjectRequest {

    BucketName            = Bucket,
    FilePath              = sourceFileName,
    Key                   = destinationFileName,
    MD5Digest             = md5Base64,
    GenerateMD5Digest     = true
};

using (var upload = s3Client.PutObject(putObjectRequest)) {  }
Run Code Online (Sandbox Code Playgroud)

.net amazon-s3

36
推荐指数
4
解决办法
3万
查看次数

如何MOQ System.IO.FileInfo类...或没有接口的任何其他类?

我正在为我创建的记录器类编写一些单元测试,我想模拟文件类.我找不到我需要用来创建MOQ的接口...那么如何在没有接口的情况下成功MOQ一个类?

我还不清楚如何在没有可用接口的情况下使用依赖注入:

private FileInfo _logFile;

public LogEventProcessorTextFile(FileInfo logFile) {
    _logFile = logFile;
}
Run Code Online (Sandbox Code Playgroud)

当我真的想做这样的事情时(注意IFileInfo而不是FileInfo):

private IFileInfo _logFile;

public LogEventProcessorTextFile(IFileInfo logFile) {
    _logFile = logFile;
}
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing interface moq

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

通过WCF发送图像的有效方式?

我正在学习WCF,LINQ和其他一些技术,从头开始编写自定义远程控制应用程序,如VNC.我在创建它时考虑到三个主要目标:

  1. 服务器将在应用程序级别(即无缝窗口)上提供"远程控制",而不是完全桌面访问.
  2. 客户端可以选择服务器上运行的任意数量的应用程序,并接收每个应用程序的图像流.
  3. 客户端可以同时连接到多个服务器.

现在我正在使用WCF发送一个表示正在发送的窗口的字节数组:

using (var ms = new MemoryStream()) {
    window.GetBitmap().Save(ms, ImageFormat.Jpeg);
    frame.Snapshot = ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

GetBitmap实现:

var wRectangle = GetRectangle();
var image = new Bitmap(wRectangle.Width, wRectangle.Height);
var gfx = Graphics.FromImage(image);

gfx.CopyFromScreen(wRectangle.Left, wRectangle.Top, 0, 0, wRectangle.Size, CopyPixelOperation.SourceCopy);

return image;
Run Code Online (Sandbox Code Playgroud)

它然后通过WCF(TCPBinding,它将始终通过LAN)发送到客户端,并在没有边框的空白窗口形式重建,如下所示:

using (var ms = new MemoryStream(_currentFrame.Snapshot))
{
    BackgroundImage = Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)

我希望这个过程在CPU和内存使用方面尽可能高效,带宽排在第三位.我的目标是让客户端连接到5台服务器,每台服务器有10多个应用程序.

我现有的方法是最好的方法(同时继续使用这些技术)并且我能做些什么来改进它?

我正在研究的想法(但我没有经验):

  • 使用开源图形库来捕获和保存图像,而不是.Net解决方案.
  • 保存为PNG或其他图像类型而不是JPG.
  • 每次发送图像增量而不是完整图像.
  • 尝试并"记录"窗口并创建压缩视频流而不是图片快照(mpeg?).

c# wcf

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

Amazon .NET AWS SDK的AmazonS3线程安全吗?

Amazon .NET AWS SDK的AmazonS3线程是安全的还是我应该AmazonS3在多线程系统中为每个请求创建一个新实例?

专门针对最新的.NET AWS SDK(版本1.3.14).

.net c# amazon-s3 amazon-web-services

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

在TaskCompletionSource.Task上调用ContinueWith方法是否安全(已经调用了.SetResult)?

如果已经被调用,ContinueWith(...)在a 上使用该方法是否安全? TaskCompletionSource.TaskTaskCompletionSource.SetResult(...)

这个基本代码有望帮助构建问题:

// this was written inside the question box, please excuse any silly errors and lack of error checking (I'm not near VS right now)...

private WebClient _webClient = new WebClient();

public Task<string> GetExamplePage() {

    var tcs = new TaskCompletionSource<string>();

    web.DownloadStringCompleted += (s, ea) => tcs.SetResult(ea.Result);

    web.DownloadStringAsync(new URI(@"http://www.example.com/example.html"));

    return tcs.task;
}

public void ProcessExamplePage() {

    var task = GetExamplePage();

    Thread.Sleep(1000);

    task.ContinueWith(t => Console.WriteLine(t.Result)); // *line in question*
}
Run Code Online (Sandbox Code Playgroud)

Console.WriteLine(...)如果WebClient.DownloadStringCompleted事件在task.ContinueWith设置之前已经被触发,那么执行吗? …

.net c# asynchronous task-parallel-library

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

如何识别并可能删除SVN存储库中的大型二进制提交?

我正在使用一个超过3年的SVN存储库,包含超过6,100个提交,大小超过1.5 GB.我想减少SVN存储库的大小(我不是在谈论完整SVN导出的大小 - 我的意思是服务器上存在的完整存储库),然后再将其移动到新服务器.

当前存储库包含所有软件项目的源代码,但它还包含相对较大的二进制文件,例如:

  • 适用于许多第三方工具的完整安装程序.
  • .jpg和.png文件(这些文件是生活在同一文件夹中的未经修改的PSD导出).
  • Bin和Obj文件夹(然后'svn忽略'下次提交).
  • Resharper目录.

自添加以来,许多这些大型文件已被"SVN删除",这进一步造成了识别最大违法者的问题.

我想要:

  • 创建一个仅包含所有软件项目代码的新SVN存储库 - 复制的文件从旧存储库维护其SVN历史记录非常重要.
  • 从现有存储库中删除大型二进制提交和文件.

这些都可能吗?

svn fsfs

14
推荐指数
2
解决办法
4929
查看次数

事件监听器是否仅限于只有一个用户?

是否可以阻止多个订阅者订阅活动?

我已经创建了一个快速示例代码片段给我的问题一些上下文但不幸的是我现在无法测试它,因为我不在我的VS机器上.

目标是:

  • 如果没有订阅者,则返回空列表.
  • 返回单个订户的返回值.
  • 如果多个订户尝试订阅该事件,则抛出异常(这是问题的关键).

这可能吗?

public delegate List<IBaseWindow> GetWindowListDelegate();
public static event GetWindowListDelegate GetWindowListEvent;

public List<IBaseWindow> GetWindowList() {

    if (GetWindowListEvent == null) {
        return new List<IBaseWindow>();
    }

    return GetWindowListEvent();
 }
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是.NET 3.5 sp1.

c# events exception

12
推荐指数
3
解决办法
4138
查看次数

如何以编程方式关闭WCF中的安全性

我在过去的两天里一直在和WCF合作,而且我的开发机器上的服务器和客户端都很顺利.既然我正试图在网络上的另一台机器上与客户端进行一些分布式测试,我就开始遇到问题了.现在我得到的错误是:

由于EndpointDispatcher上的ContractFilter不匹配,因此无法在接收方处理带有Action'http://tempuri.org/IWindowUpdateContract/UpdateWindowFrames ' 的消息.这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配.检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无).

因为这已经是一个巨大的学习经验(我之前没有做任何远程处理,RPC等)我想继续开发学习工具并在我完成时重新访问安全性(我无意构建任何实际的东西)在没有适当的安全最佳实践的情况下使用).

笔记:

  • 我没有为WCF配置文件 - 我正在以编程方式执行所有操作.
  • 我的网络不是域的一部分,因此默认的安全设置对我不起作用(使用net.tcp).
  • 我正在使用'.Net 3.5'.

我的服务器是这样创建的:

    var svh = new ServiceHost(_serviceImplementation);

    var binding = new NetTcpBinding();

    binding.ReaderQuotas.MaxArrayLength = 2000000;
    binding.Security.Mode = SecurityMode.None;
    binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
    binding.Security.Transport.ProtectionLevel = ProtectionLevel.None;
    binding.Security.Message.ClientCredentialType = MessageCredentialType.None;

    svh.AddServiceEndpoint(_serviceInterface, binding, string.Format("net.tcp://{0}:{1}", _endPoint.Address, _endPoint.Port));

    _stopFlag = new AutoResetEvent(false);

    svh.Open();

    _stopFlag.WaitOne();
Run Code Online (Sandbox Code Playgroud)

我的客户端是这样创建的:

    var binding = new NetTcpBinding();

    binding.ReaderQuotas.MaxArrayLength = 2000000;
    binding.Security.Mode = SecurityMode.None;
    binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
    binding.Security.Transport.ProtectionLevel = ProtectionLevel.None;
    binding.Security.Message.ClientCredentialType = MessageCredentialType.None;

    var scf = new ChannelFactory<IUserInputContract>(binding, "net.tcp://192.168.0.42:8001");
    _uiUpdateServer = scf.CreateChannel(); …
Run Code Online (Sandbox Code Playgroud)

wcf wcf-security

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