小编Bas*_*lew的帖子

TcpListener:如何在等待AcceptTcpClientAsync()时停止侦听?

我不知道如何在异步方法等待传入连接时正确关闭TcpListener.我在SO上找到了这个代码,这里是代码:

public class Server
{
    private TcpListener _Server;
    private bool _Active;

    public Server()
    {
        _Server = new TcpListener(IPAddress.Any, 5555);
    }

    public async void StartListening()
    {
        _Active = true;
        _Server.Start();
        await AcceptConnections();
    }

    public void StopListening()
    {
        _Active = false;
        _Server.Stop();
    }

    private async Task AcceptConnections()
    {
        while (_Active)
        {
            var client = await _Server.AcceptTcpClientAsync();
            DoStuffWithClient(client);
        }
    }

    private void DoStuffWithClient(TcpClient client)
    {
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

主要:

    static void Main(string[] args)
    {
        var server = new Server();
        server.StartListening();

        Thread.Sleep(5000);

        server.StopListening(); …
Run Code Online (Sandbox Code Playgroud)

c# sockets c#-5.0 .net-4.5

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

Lazy <T>有效期

我想在Lazy对象上实现过期时间.到期的冷却时间必须从第一次检索值开始.如果我们得到了值,并且过期时间已经过去,那么我们重新执行该函数并重置到期时间.

我不熟悉扩展,部分关键字,我不知道最好的方法.

谢谢

编辑:

到目前为止的代码:

新编辑:

新代码:

public class LazyWithExpiration<T>
{
    private volatile bool expired;
    private TimeSpan expirationTime;
    private Func<T> func;
    private Lazy<T> lazyObject;

    public LazyWithExpiration( Func<T> func, TimeSpan expirationTime )
    {
        this.expirationTime = expirationTime;
        this.func = func;

        Reset();
    }

    public void Reset()
    {
        lazyObject = new Lazy<T>( func );
        expired = false;
    }

    public T Value
    {
        get
        {
            if ( expired )
                Reset();

            if ( !lazyObject.IsValueCreated )
            {
                Task.Factory.StartNew( () =>
                {
                    Thread.Sleep( expirationTime );
                    expired = true; …
Run Code Online (Sandbox Code Playgroud)

c# lazy-loading

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

手动添加DataGridViewRow会导致空单元格

这有效:

DataGridView.Rows.Add("Bla Bla Bla", value1, value2)
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

Dim newrow As New DataGridViewRow
newrow.SetValues("Bla Bla Bla", value1, value2)
If Not value1.Equals(value2) Then
  newrow.DefaultCellStyle.ForeColor = Color.Red
End If
DataGridView.Rows.Add(newrow)
Run Code Online (Sandbox Code Playgroud)

整行都是空的.

为什么排满了空单元格?

vb.net datagridview

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

保存后TimeSpan滴答获得+1

我有一个小巧的问题,我不知道如何解决这个问题:

我有一个这样的Poco:

public class Test
{
    public long Id { get; set; }
    public TimeSpan? Time { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

字段Time是MySQL'TIME'.例如,如果我用Dapper加载一个带有1000个刻度的时间字段的行,并且我保存此Poco而不做任何更改,再次重新加载同一行,时间字段现在为1001刻度.

我究竟做错了什么 ?

编辑:

我如何加载我的行:

var testobj = Db.Query<Test>("select * from Test where Id = @id", new {id = Id});
Run Code Online (Sandbox Code Playgroud)

我如何保存它:

Db.Execute("replace into Test values (@Id,@Time)", testObj);
Run Code Online (Sandbox Code Playgroud)

编辑2:

保存前的时间跨度对象:

{15:22:24}
    Days: 0
    Hours: 15
    Milliseconds: 0
    Minutes: 22
    Seconds: 24
    Ticks: 553440000000
    TotalDays: 0.64055555555555554
    TotalHours: 15.373333333333333
    TotalMilliseconds: 55344000.0
    TotalMinutes: 922.4
    TotalSeconds: 55344.0
Run Code Online (Sandbox Code Playgroud)

保存后:

{15:22:25}
    Days: 0
    Hours: 15
    Milliseconds: …
Run Code Online (Sandbox Code Playgroud)

c# dapper

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

Java,带有BouncyCastle的数字签名

在Java中,我尝试使用充气城堡和本规范中的证书签署一个byte [](这是我的文档的sha256摘要):

http://www.ebics.org/fileadmin/unsecured/specification/spec_current_EN/EBICS_Specification_2.5_final-16-05-2011.pdf

在第14.1.4.1.1节数字签名生成中.

我在bouncy的java doc中找到了这个方法:

public static byte[] signer(byte[] datas, Certificat cert) {
    try {
        List<X509Certificate> certList = new ArrayList<X509Certificate>();
        CMSTypedData msg = new CMSProcessableByteArray(datas);

        certList.add(cert.getCertificat());

        Store certs = new JcaCertStore(certList);

        CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
        ContentSigner sha256signer = new JcaContentSignerBuilder(
                "SHA256withRSA").setProvider("BC").build(
                cert.getPrivateKey());

        gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
                new JcaDigestCalculatorProviderBuilder().setProvider("BC")
                        .build()).build(sha256signer, cert.getCertificat()));

        gen.addCertificates(certs);

        CMSSignedData sigData = gen.generate(msg, true);
        return sigData.getEncoded();
    } 
    catch (Exception e) {
        throw new RuntimeException(
                "Erreur lors de la signature du document", e);
    }
Run Code Online (Sandbox Code Playgroud)

我不知道这个签名是否真的符合规范要求的PKCS#1 1.5.我是否必须手动添加填充?和RSA256的OID?

java bouncycastle digital-signature

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