小编Jef*_*eff的帖子

取消不接受CancellationToken的异步操作的正确方法是什么?

取消以下内容的正确方法是什么?

var tcpListener = new TcpListener(connection);
tcpListener.Start();
var client = await tcpListener.AcceptTcpClientAsync();
Run Code Online (Sandbox Code Playgroud)

简单地调用tcpListener.Stop()似乎导致a ObjectDisposedException并且该AcceptTcpClientAsync方法不接受CancellationToken结构.

我完全错过了一些明显的东西吗

.net c# asynchronous task-parallel-library async-await

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

WPF中的自定义ContentControl

我想我在这里要求关于正确应用WPF的讲座,但是我会抓住机会,因为我已经结束了.我认为这可能主要是因为我完全接受WPF模板和样式的嗜睡,所以我很高兴听到任何这样的讲座.

我正在写一种音频编辑器/事件编排器.我有一个我很满意的曲目编辑器.但是,我构建它主要是出于自定义控件(我知道,这可能是一个WPF罪).为了与主题保持一致,我想为曲目制作标准标题,但我希望单独的曲目"类型"能够定义该标题中的内容.我认为控制器在边缘上定义了一种"抓地力",然后允许实施者"填充"该物质将很好地工作.但是,我不知道如何在不使用样式的情况下在WPF中执行此操作,即使我最终使用样式,我也想了解这一点.

这可能归结为想要一种简单的ContentControl控件(例如按钮)的一种示例实现,而不能找到一个(除了AvalonDock,最终使用 - 正确的我确定 - 为此模板).在我看来,xaml看起来像这样:

<ContentControl x:Class="TestArea.CustomContentControl2"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Hello"/>
    <ContentPresenter Grid.Column="1"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

但是,当然,这不起作用.我很确定我可以通过在幕后玩重载来扯掉同样的东西,但如果我可以做这样的事情会很好.我真的必须把所有可怕的,程序性的方法放在我身后并使用你所说的这些风格吗?如果是这样,有人至少可以告诉我该按钮在框架中看起来像什么?

.net c# wpf wpf-controls

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

可以使用CER来保证永远不会调用finalize吗?

我们有一个非常棘手的互操作问题,其中用于初始化第三方系统的线程必须是用于终止它的相同线程.不这样做会导致死锁.我们正在IIS中托管的WCF服务执行互操作.目前,这种清理工作已经完成,通常效果很好.不幸的是,在负载很重的情况下,IIS会做一个粗鲁的卸载,我们永远不会打电话处理.我们可以将关闭逻辑移动到关键终结器中,但这没有用,因为我们不再能够访问初始化线程!在这一点上,我们唯一的办法似乎是通知CLR AppDomain现在可能处于损坏状态.但是,我不知道该怎么做(或者甚至可能).这可能是在阶级合同的效用,但我承认我并不完全理解这些合同.

编辑:或者,这可以被视为终结器中的线程亲和性问题.如果有人有一个聪明的解决方案,我都是耳朵:)

c# iis multithreading interop cer

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

无锁参考计数

我正在研究一个需要广泛的C API互操作的系统.部分互操作需要在任何操作之前和之后初始化和关闭相关系统.如果不这样做将导致系统不稳定.我通过简单地在核心一次性环境类中实现引用计数来实现这一点,如下所示:

public FooEnvironment()
{
  lock(EnvironmentLock)
  {
    if(_initCount == 0)
    {
      Init();  // global startup
    }
    _initCount++;
  }
}

private void Dispose(bool disposing)
{
  if(_disposed)
    return;

  if(disposing)
  {
    lock(EnvironmentLock)
    {
      _initCount--;
      if(_initCount == 0)
      {
        Term(); // global termination
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这很好,并完成了目标.但是,由于任何互操作操作必须使用块嵌套在FooEnvironment中,因此我们始终锁定并且分析表明此锁定占运行时期间完成工作的近50%.在我看来,这是一个基本的概念,.NET或CLR中的某些东西必须解决它.有没有更好的方法来进行引用计数?

.net c# concurrency locking reference-counting

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

如何与C#的英特尔新DRNG(RDRAND指令)连接?

我希望从C#程序集中使用英特尔的数字随机数生成器(Ivy Bridge中的RDRAND指令).我看过cpp libs,但我希望有一个更"管理"的解决方案.有任何想法吗?

c# random cryptography intel rdrand

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