小编Chr*_*ler的帖子

byte []数组到struct的可变长度数组

我从套接字接收一个字节数组,字节结构只是一个固定宽度字符串的大字符数组.在某些情况下,最后一个字段是动态的(而不是固定长度),我试图将字节元素化为结构.我已经读过可变长度char数组需要是IntPtr,但我还没弄清楚如何用剩余的字节来制作它.我还读过一些文章,我可能需要第二种结构,但仍然无法弄清楚如何正确地制造它.

这是一个这样的网站

在结构中处理可变长度char数组的正确方法是什么?

结构:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Header
{
    #region private member fields

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    private char[] _f1;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    private char[] _f2;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    private char[] _f3;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    private char[] _f4;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    private char[] _f5;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    private char[] _f6;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    private char[] _f7;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
    private char[] _f8;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
    private char[] _f9; …
Run Code Online (Sandbox Code Playgroud)

c# struct marshalling

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

RichTextBox中的中心对齐段落

我使用RichTextBox,我想格式化对齐的段落中的所有行,除了最后一行将与中心对齐.

如下:

      sssssssssssssssssssssssss
      sssssssssssssssssssssssss
      sssssssssssssssssssssssss
           ssssssssssssss     
Run Code Online (Sandbox Code Playgroud)

我使用此代码进行对齐.

c# richtextbox winforms

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

需要一些正则表达式匹配/替换模式的帮助

我的最终目标是将以下字符串转换为JSON,但我会通过将fieldname与每个值组合来让我更接近一些.

样本数据:

Field1:abc;def;Field2:asd;fgh;
Run Code Online (Sandbox Code Playgroud)

使用Regex.Replace(),我需要它至少看起来像这样:

Field1:abc,Field1:def,Field2:asd,Field2:fgh
Run Code Online (Sandbox Code Playgroud)

最终,如果可以通过一次调用中的Regex完成,这个结果将是非常棒的.

{"Field1":"abc","Field2":"asd"},{"Field1":"def","Field2":"fgh"}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这种模式的许多不同变体,但似乎无法做到正确:

(?:(\w+):)*?(?:([^:;]+);)
Run Code Online (Sandbox Code Playgroud)

只有一个我能找到的其他例子就是在做类似的事情,但只有足够的差异,我无法完全理解它.

正则表达式在CDL上重复捕获?

EDIT:
Run Code Online (Sandbox Code Playgroud)

这是我的解决方案.我不会将其作为"解决方案"发布,因为我想赞扬其他人发布的内容.最后,我从每个发布的解决方案中拿出一块,然后想出了这个.感谢所有发布的人.我认为编译,执行最快并且结果最准确的解决方案.

    string hbi = "Field1:aaa;bbb;ccc;ddd;Field2:111;222;333;444;";

    Regex re = new Regex(@"(\w+):(?:([^:;]+);)+");
    MatchCollection matches = re.Matches(hbi);

    SortedDictionary<string, string> dict = new SortedDictionary<string, string>();

    for (int x = 0; x < matches.Count; x++)
    {
        Match match = matches[x];
        string property = match.Groups[1].Value;

        for (int i = 0; i < match.Groups[2].Captures.Count; i++)
        {
            string key = i.ToString() + x.ToString();
            dict.Add(key, string.Format("\"{0}\":\"{1}\"", property, match.Groups[2].Captures[i].Value));
        }
    }
    Console.WriteLine(string.Join(",", dict.Values));
Run Code Online (Sandbox Code Playgroud)

c# regex

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

在哪里使用ROWLOCK,READPAST与CTE,子查询和更新?

在尝试避免死锁并同步来自多个服务的请求时,我正在使用ROWLOCK,READPAST.我的问题是我应该把它放在一个包含CTE,子查询和CTE上的更新语句的查询中?是否有一个关键点或三个地方都应该有它(下图)?或者也许有更好的方法来编写这样的查询,以便我只能选择将要更新的行.

alter proc dbo.Notification_DequeueJob
    @jobs int = null
as

    set nocount on;
    set xact_abort on;

    declare @now datetime
    set @now = getdate();

    if(@jobs is null or @jobs <= 0) set @jobs = 1

    ;with q as (
        select 
            *, 
            dense_rank() over (order by MinDate, Destination) as dr
        from 
        (
            select *, 
                min(CreatedDt) over (partition by Destination) as MinDate
            from dbo.NotificationJob with (rowlock, readpast)
        ) nj

    where (nj.QueuedDt is null or (DATEDIFF(MINUTE, nj.QueuedDt, @now) > 5 and nj.CompletedDt is null))
    and …
Run Code Online (Sandbox Code Playgroud)

common-table-expression sql-server-2008 rowlocking

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

具有相关活动ID的EventSource跟踪

我已经开始使用ETW和Entlib 6中的进程外语义日志记录块。当我使用async / await时,未在延续线程上设置CurrentThreadActivityId,并且TPL框架不会记录传输事件。这使得执行端到端跟踪非常困难。

根据Microsoft的文档,TPL框架应该记录一个传输事件并生成一个新的activityid,但是我似乎无法使其正常工作。

Entlib 6中的文档

这是一个显示问题的小例子:

要记录TPL事件,我使用以下方法:

<eventSource name="System.Threading.Tasks.TplEventSource" level="Informational" matchAnyKeyword="1"/>
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AsyncContextTest
{
    class Program
    {
        static Guid _activityId = Guid.NewGuid();

        static void Main(string[] args)
        {
            EventSource.SetCurrentThreadActivityId(_activityId);
            Console.WriteLine(EventSource.CurrentThreadActivityId);
            Task t = Task.Run(async () => await DoStuffAsync());
            Console.WriteLine(EventSource.CurrentThreadActivityId);

            Console.Read();
        }

        public static async Task DoStuffAsync()
        {
            var x = "one,two,three".Split(',');
            Console.WriteLine(EventSource.CurrentThreadActivityId);
            await Task.Delay(1000);
            Console.WriteLine(EventSource.CurrentThreadActivityId);
            var y = String.Join(",", x);

            Console.WriteLine("Done");

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果

334540cc-ccb1-4196-8587-815abf237e4c …
Run Code Online (Sandbox Code Playgroud)

c# etw async-await .net-4.5

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

将名称/值对反序列化为对象

我有一个名称/值对的集合,它们用单词名称和值来定义,就像键/值对象一样,即

[{"Name":"ActivityId","DataType":1,"Value":"a7868f8c-07ac-488d-a414-714527c2e76f"}, 
 {"Name":"Address1","DataType":2,"Value":"123 Main St"}]
Run Code Online (Sandbox Code Playgroud)

如果我有一个像这样的对象:

class Request
{
    public Guid ActivityId { get; set; }
    public string Address1 {get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何将其反序列化为上面的类?

我应该考虑使用自定义转换器吗?Json.NET 有内置的东西吗?有没有办法用我缺少的属性来装饰属性?自定义序列化会更容易吗?

我试图避免从字典中提取每个属性的数据,这将是一种简单的方法,但需要我对每个自定义实现都这样做。我更喜欢使用 Json.NET(或 .NET 框架中的某些内容)在单一方法中的基类中执行此操作。

我已经搜索了很多,大多数示例都是真实的名称/值对,没有以名称和值作为前缀,即

[{"ActivityId":"a7868f8c-07ac-488d-a414-714527c2e76f"}]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# json json.net

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

在blackberry应用程序的create directory上抛出"FileIOException:Not a directory"

我想创建我的Application目录来保存我的配置文件.但黑莓模拟器在创建目录时抛出异常.我试过以下代码.

try {
FileConnection myAppDir = (FileConnection) Connector.open("file:///store/home/user/myAppDir", Connector.READ_WRITE);
    if (!myAppDir.exists()){
        myAppDir.mkdir(); // Exception throw here
    }
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

抛出异常

net.rim.device.api.io.file.FileIOException: Not a directory
Run Code Online (Sandbox Code Playgroud)

file-io blackberry create-directory

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

有没有更快的方式从网站下载内容?

这是我现在的代码:

private string downloadContent() 
        {
            try
            {
                WebRequest request = WebRequest.Create(url);
                request.Method = "GET";
                response = request.GetResponse();
                Stream stream = response.GetResponseStream();
                reader = new StreamReader(stream);
                string content = reader.ReadToEnd();
                return content;
            }
            catch
            {
                return error;
            }
        }
Run Code Online (Sandbox Code Playgroud)

这是网站:

http://chatroll.com/testings
Run Code Online (Sandbox Code Playgroud)

当我在聊天中写一些内容时,我就这样做,这样每隔n秒它就会显示我在程序textBox1中写的内容,并将其写在我硬盘上的文本文件记录器中.

问题是有时候如果我在聊天中输入的东西非常快(例如:你好(输入),嗨(输入),丹尼尔(输入))有时你的程序中不会显示你好.我不认为我输入内容的内容读得足够快.

有没有更快的方式来下载页面源并处理它?也许我下载它的方式不是那么快?

你可以在这里看到我的项目:

https://skydrive.live.com/redir?resid=3B8A7D9F66FF985B!171&authkey=!AFO6EmoF38MtkKQ

c#

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

VS 2017 构建工具失败并出现错误 MSB4019:未找到导入的项目“D:\Microsoft.Cpp.Default.props”

我正在构建一个新的 TFS 构建服务器,并决定使用 VS 2017 构建工具而不是安装完整版本的 VS。当我尝试构建我们的 C++ 项目时,它抛出以下错误:

Error MSB4019: The imported project "D:\Microsoft.Cpp.Default.props" was not found.
Run Code Online (Sandbox Code Playgroud)

经过数小时的研究,我离解决这个问题不远了。我尝试添加以下注册表设置,但没有帮助。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
Run Code Online (Sandbox Code Playgroud)

我猜这个产品的微软安装程序坏了。是否有针对此错误的标准修复程序,或者我应该放弃我的努力并简单地安装完整版本?

在项目文件中,我找到了这个条目:

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
Run Code Online (Sandbox Code Playgroud)

所以,我猜这意味着变量 VSTargetsPath 以某种方式指向 D: 驱动器的根目录,但我不知道在哪里设置该值。我们当前的构建服务器没有名为 VSTargetsPath 的环境变量集,但它确实缺少注册表项。它还安装了完整版本的 VS。

c++ msbuild tfsbuild visual-studio

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