小编Art*_*iom的帖子

带两个索引的循环缓冲区

我想制作一个循环缓冲区,它有两个索引:

  • WriteIndex(由第一个线程控制)在缓冲区中写入新值
  • ReadIndex(由第二个线程控制)从缓冲区读取值并进行分析

那么,当两个索引处于相同位置时,如何暂停Thread.我的意思是,如果你没有写任何新数据,你就无法读取它,所以如果writeindex和readindex处于相同位置,你只需要编写新数据,而不是读取它.

如何阻止线程直到发生什么?

c# multithreading circular-buffer

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

aspnet-core 中的条件中间件在 asp.net core 1.1 中不起作用

我按照这篇文章在我们的项目中实现了条件中​​间件,它运行得很好。但当我们将项目从 .netcore 1.0 升级到 .netcore 1.1 时,它不起作用。

我在我的启动中编写了以下代码。

Func<HttpContext, bool> isApiRequest = (HttpContext context) => context.Request.Path.ToString().StartsWith("/api/");

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

//For MVC not API
app.UseWhen(context => !isApiRequest(context), appBuilder =>
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationScheme = "Cookies",
        AutomaticAuthenticate = true
    });

    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
    {
        AuthenticationScheme = "oidc",
        SignInScheme = "Cookies",
        AutomaticChallenge = true,


        Authority = authority,
        RequireHttpsMetadata = false,

        ClientId = "sampleClient",
        //ClientSecret = "secret",

        Scope = { "openid" , "profile" },

        ResponseType = "id_token token",//"code id_token",                        

        SaveTokens = true
    }); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net .net-core asp.net-core identityserver4

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

Mvvm cross 3.5绑定显示交战

在将我的项目更新为Unified API和MVVM Cross 3.5 stable之后,我在控制台中收到以下交换消息的所有按钮绑定...

我这样绑定.

try {
 this.AddBindings(
  new Dictionary < object, string > () {

   //all the command controls - such as buttons
   {
    btnXmit,
    "TouchUpInside cmdXmitClicked"
   }, {
    btnCancel,
    "TouchUpInside cmdBack"
   },

  });
} catch (Exception error) {

}
Run Code Online (Sandbox Code Playgroud)

Cirrious.CrossCore.WeakSubscription.MvxWeakEventSubscription 2[System.Windows.Input.ICommand,System.EventArgs]..ctor (ICommand source, System.Reflection.EventInfo sourceEventInfo, System.EventHandler1 targetEventHandler)[0x00028]在Cirrious.CrossCore的/Volumes/WORKSPACE/Workspace/V3.5/framework/framework/MvvmCross-3/CrossCore/Cirrious.CrossCore/WeakSubscription/MvxWeakEventSubscription.cs:52 .WeakSubscription.MvxCanExecuteChangedEventSubscription..ctor(ICommand source,System.EventHandler 1 eventHandler) [0x00000] in /Volumes/WORKSPACE/Workspace/V3.5/framework/framework/MvvmCross-3/CrossCore/Cirrious.CrossCore/WeakSubscription/MvxCanExecuteChangedEventSubscription.cs:21 at Cirrious.CrossCore.WeakSubscription.MvxWeakSubscriptionExtensionMethods.WeakSubscribe (ICommand source, System.EventHandler1 eventHandler)[0x00003] in /Volumes/WORKSPACE/Workspace/V3.5/framework/framework/MvvmCross-3/CrossCore/Cirrious.CrossCore/WeakSubscription/MvxWeakSubscriptionExtensionMethods. cs:68在Cirrious.MvvmCross.Binding.Touch.Target.MvxUIControlTouchUpInsideTargetBinding.SetValueImpl(System.Object target,System.Object value)[0x00045] in /Volumes/WORKSPACE/Workspace/V3.5/framework/framework/MvvmCross-3在/ Volumes/WORKSPACE/Workspace中的Cirrious.MvvmCross.Bindings.Bindings.Target.MvxConvertingTargetBinding.SetValue(System.Object value)[0x000bd]// Cirrious/Cirrious.CirvousCross.Binding.Touch/Target/MvxUIControlTouchUpInsideTargetBinding.cs:74 /V3.5/framework/framework/MvvmCross-3/Cirrious/Cirrious.MvvmCross.Binding/Bindings/Target/MvxConvertingTargetBinding.cs:64 at Cirrious.MvvmCross.Bindings.Bindings.MvxFullBinding.UpdateTargetFromSource(System.Object value)[0x00036 …

binding mvvmcross

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

从 IWpfTextView 获取非 cs 文件的文档路径

我想在VS的文本编辑器中添加一些按钮。在创建 ViewPort 管理器时的 ViewPortTextViewCreationListener 中,我想知道文档或其路径

public void TextViewCreated(IWpfTextView textView) {
    var result = _textDocumentFactoryService.TryGetTextDocument(TextView.TextBuffer, out ITextDocument textDocument);
    new ViewPortSwitcher(textView);
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用从 TextBufferITextDocumentFactoryService获取(请参阅此处的答案)。如果我打开 cs 文件,它可以正常工作。但如果我打开 cshtml 文件 TryGetTextDocument 返回 false。ITextDocument

c# visual-studio vs-extensibility visual-studio-extensions

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

实现IAuthenticationFilter,工作单元和依赖注入

我有一个Web API 2项目正在实现自定义IAuthenticationFilter,如下所示.

我的问题是Unity没有在BasicAuthenticator类中注入UnitOfWork.正如预期的那样,Unity成功地在控制器中注入了UnitOfWork.

public class BasicAuthenticator : Attribute, IAuthenticationFilter
{
    [Dependency]
    public UnitOfWork UoW { get; set; }

    public bool AllowMultiple { get { return false; } }     

    public Task AuthenticateAsync(HttpAuthenticationContext context,
                                  CancellationToken cancellationToken)
    {
        // ignore missing implementation
        context.Principal = new ClaimsPrincipal(new[] { id });     
        return Task.FromResult(0);
    }

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context,
                            CancellationToken cancellationToken) {}
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework unity-container unit-of-work asp.net-web-api2

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

由于DuplexBinding,WCF服务引用生成一个空的reference.cs

我有WCF服务.这是配置

  <basicHttpBinding>
    <binding name="EmergencyRegistratorBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </basicHttpBinding>
Run Code Online (Sandbox Code Playgroud)

和服务配置

  <service behaviorConfiguration="Default" name="Breeze.AppServer.Emergencies.EmergencyRegistrator">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="EmergencyRegistratorBinding"
        contract="Services.IEmergencyRegistrator" />
  </service>
Run Code Online (Sandbox Code Playgroud)

一切都很好.但我需要将basicHttpBingind更改为DuplexBinding.我添加了延伸:

<extensions>
  <bindingElementExtensions>
    <add name="pollingDuplex" type="System.ServiceModel.Configuration.PollingDuplexElement, System.ServiceModel.PollingDuplex"/>
  </bindingElementExtensions>
</extensions>
Run Code Online (Sandbox Code Playgroud)

并改变上面提到的行:

  <customBinding>
    <binding name="DuplexmergencyRegistratorBinding">
      <binaryMessageEncoding/>
      <pollingDuplex maxPendingSessions="2147483647" maxPendingMessagesPerSession="2147483647" inactivityTimeout="02:00:00" serverPollTimeout="00:05:00"/>
      <httpTransport authenticationScheme="Negotiate"/>
    </binding>
  </customBinding>
Run Code Online (Sandbox Code Playgroud)

  <service behaviorConfiguration="Default" name="Breeze.AppServer.Emergencies.EmergencyRegistrator">
    <endpoint address="" binding="customBinding" bindingConfiguration="DuplexmergencyRegistratorBinding" contract="Breeze.Core.Services.IEmergencyRegistrator" />
    <endpoint address="mex" binding="customBinding" bindingConfiguration="DuplexmergencyRegistratorBinding" contract="IMetadataExchange"/>
  </service>
Run Code Online (Sandbox Code Playgroud)

我已将服务参考添加到WCF项目.引用已成功添加,但Reference.cs几乎为空.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.225
//
//     Changes …
Run Code Online (Sandbox Code Playgroud)

wcf custom-binding pollingduplexhttpbinding

0
推荐指数
1
解决办法
9883
查看次数

Linq匿名类型

我不经常使用LINQ,关于它的事情是有效的方式使用它是一种效率较低的方式.

我有一个项目列表,我只想对每个项目进行计算并返回最低的计算十进制数(注释编号,而不是项目).我有这个LINQ可以工作,但我想知道它是否是在这种情况下可以使用LINQ的最有效方式.

var bestPrice = query.Select(x => new
{
    Interest = CalcInterest(amount, term, x.ProductRate.Rate)
})
.OrderBy(x => x.Interest)
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

其中"query"是预选的LINQ列表,"CalcInterest"是用于计算数字的方法.

此查询将被大量使用,因此任何小的收益都将是大赢.

c# linq

0
推荐指数
1
解决办法
66
查看次数