我不知道如何在异步方法等待传入连接时正确关闭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) 我想在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) 这有效:
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)
整行都是空的.
为什么排满了空单元格?
我有一个小巧的问题,我不知道如何解决这个问题:
我有一个这样的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) 在Java中,我尝试使用充气城堡和本规范中的证书签署一个byte [](这是我的文档的sha256摘要):
在第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?
c# ×3
.net-4.5 ×1
bouncycastle ×1
c#-5.0 ×1
dapper ×1
datagridview ×1
java ×1
lazy-loading ×1
sockets ×1
vb.net ×1