小编Raf*_*aeu的帖子

Action T同步和异步

我有一个ContextMenuStrip控件,允许你执行一个动作是两种不同的风格:SyncAsync.

我试图用泛型覆盖所有内容所以我这样做:

public class BaseContextMenu<T> : IContextMenu
{
   private T executor;

   public void Exec(Action<T> action)
   {
      action.Invoke(this.executor);
   }

   public void ExecAsync(Action<T> asyncAction)
   {
       // ...
   }
Run Code Online (Sandbox Code Playgroud)

我如何编写异步方法以执行通用操作并同时使用菜单"执行某些操作"?我看到签名BeginInvoke是这样的:

asyncAction.BeginInvoke(this.executor, IAsyncCallback, object);
Run Code Online (Sandbox Code Playgroud)

c# asynchronous

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

递归树创建

Node在 C# 中有一个具有以下属性的类:

public class Node
{
   public int Id {get;set;}
   public int? ParentId {get;set;}
   public string Label {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我有一个TreeView控件,它提供以下方法来创建新节点:

MyTreeView.CreateNode(key, label);
parent.Nodes.CreateNode(key, label);
Run Code Online (Sandbox Code Playgroud)

如果我想添加一个新的子节点,我需要使用第二种方法,否则使用第一种方法。两者都返回一个类型为 的对象TreeNode

考虑到根节点具有 ,您将如何在 C# 中创建一个递归函数来填充树视图ParentId = null

这是我到目前为止所做的:

// create a list of root nodes
var roots = myList.Where(x => x.ParentId == null);
// send the roots to a recursive func
foreach(var root in roots)
{
   AddNode(null,root,myList);
}
Run Code Online (Sandbox Code Playgroud)

这是我的递归函数:

private void AddNode(Node parent, Node current, IList<Node> …
Run Code Online (Sandbox Code Playgroud)

c# recursion

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

在路径中有空格的FORFILES

我试图在dos中运行此命令

FORFILES with params /P C:\Builds\ /M *.chm /S /C "cmd /c copy @file C:\My Brand\"
Run Code Online (Sandbox Code Playgroud)

它爆炸,因为目标文件夹路径中有一个空格.如何传递由""分隔的源和目标路径?我尝试添加一个额外的双引号,我得到"命令不被识别"

batch-file

5
推荐指数
2
解决办法
4302
查看次数

OWIN身份验证,使当前令牌失效并删除co​​okie

我有一个OWIN中间件用于身份验证.我们有两种类型的身份验证.第一种类型是使用以下配置的承载令牌

var OAuthOptions =  new OAuthAuthorizationServerOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
        TokenEndpointPath = new PathString("/Token"),
        Provider = new ApplicationOAuthProvider(PublicClientId),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
        AllowInsecureHttp = true,
        AccessTokenFormat = new SecureTokenFormatter(GetMachineKey())
    };
Run Code Online (Sandbox Code Playgroud)

第二种类型使用身份验证cookie进行外部登录

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
    AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
    CookieHttpOnly = true,
    CookieSecure = CookieSecureOption.SameAsRequest,
    CookieName = ".AspNet." + DefaultAuthenticationTypes.ExternalCookie,
    ExpireTimeSpan = TimeSpan.FromMinutes(5),
    TicketDataFormat = new SecureTokenFormatter(GetMachineKey())
});
Run Code Online (Sandbox Code Playgroud)

当用户注销时,我们实际发出了两个Logout

Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
Run Code Online (Sandbox Code Playgroud)

Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer);
Run Code Online (Sandbox Code Playgroud)

对于第一个,我希望看到从浏览器中删除.AspNet.ExternalCookie Cookie,但事实并非如此.对于第二个,我希望我的令牌失效,而User.Current.Identity = null,这不是.

那么我怎么能1)以物理方式注销当前会话的当前身份?2)从浏览器中删除外部Cookie?

c# authentication owin

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

Android从Pixels模型到dp测量

嗨,我正在开发一个Android项目,我从图形设计器获得以下信息: 在此输入图像描述

设计是针对Android hdpi屏幕完成的,该屏幕应该是基于Android SDK文档的960 x 540 px(640 x 360 dp)/ hdpi/Normal屏幕.在Android工作室内我试图复制布局,但我很难从这个模拟开始计算DP.我应该遵循哪些好的教程?我尝试使用Nexus 5,但是当我切换到Nexus 6时,布局完全不同,我在我的XML中使用dp.

android

5
推荐指数
0
解决办法
172
查看次数

Android图标和正确的DP大小

我正在浏览android的图标大小指南,如果我在GitHub上为每个图标下载他们的图标集,我可以找到如下正确的文件夹:

  • 绘制
  • 18 dp
  • 24 dp
  • 36分
  • 48 dp
  • 绘制,华电国际
  • 18 dp
  • 24 dp
  • 36分
  • 48 dp
  • ...现在我无法找到应该用于特定控件的DP.例如:
  • 操作栏/工具栏图标应为32dp,但图标本身为24dp
  • 抽屉项目图标?未标明.应该是18dp?
  • 在视图18dp TextView图标和一般图标?
  • 按钮图标?未标明
  • Fab Button图标大小?未标明

任何人都可以指向我正确的资源,以便我可以正确导入相对dp大小的图标?

android dpi android-icons

5
推荐指数
0
解决办法
651
查看次数

如果没有预先附加路线

我们已经实现了ASP.NET MVC网站的本地化版本,其网址结构如下:

网址:// {语言} - {文化}/{控制器}/{行动}/{ID}

通过这种方式,我们可以按语言生成URL,这些URL由Google bot正确抓取:

  1. HTTP://本地主机/ EN-US /主页
  2. HTTP://本地主机/ FR-FR /主页

翻译在两个地方实现.首先,我们使用以下方法修改了MVC的默认路由:

routes.MapRoute(
    name: "Default",
    url: "{language}-{culture}/{controller}/{action}/{id}",
    defaults: new
    {
        controller = "Home", 
        action = "Index", 
        id = UrlParameter.Optional,
        language = "en",
        culture = "US"
    }
);
Run Code Online (Sandbox Code Playgroud)

然后我们创建了一个动作过滤器,它切换到URL中可用的当前语言,如果不可用于默认值:

   public class LocalizationAttribute : ActionFilterAttribute
    {        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            string language = (string)filterContext.RouteData.Values["language"] ?? "en";
            string culture = (string)filterContext.RouteData.Values["culture"] ?? "US";

            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果用户输入http:// …

c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-4

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

RabbitMQ 消息在没有订阅者的情况下还能存活多久?

我正在使用 MassTransit 和 RabbitMQ 创建一个简单的发布者/订阅者。发布者有以下代码来初始化总线:

/** create the bus */
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
    {
        h.Username("guest");
        h.Password("guest");
    });
});

/** start the bus and publish */
bus.Start();
bus.Publish<IPersonLogin>(new {FirstName = "John", LastName = "Smith"});
Run Code Online (Sandbox Code Playgroud)

订阅者有这个初始化代码:

var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
    {
        h.Username("guest");
        h.Password("guest");
    });

    cfg.ReceiveEndpoint(host, "person_login", e =>
    {
        e.Consumer<PersonLoginConsumer>();
    });
});
Run Code Online (Sandbox Code Playgroud)

如果我关闭订阅者并发布 2 条消息,则消息不会丢失,一旦订阅者恢复生机,消息就会得到处理。

所以我的问题是:

  1. 我如何确保消息保留在 RabbitMQ 的队列中,直到一个订阅者出现并拿起它?
  2. 如果服务器重新启动并且某些消息没有被任何订阅者处理,它们会丢失还是在订阅者重新启动后立即被处理?
  3. 这是确保处理每条消息的正确模式还是我应该使用不同的策略?

c# masstransit rabbitmq

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

发生字符串后删除文本

我有一个字符串,具有以下格式:

string sample = "A, ABC, 1, ACS,,"
Run Code Online (Sandbox Code Playgroud)

如您所见,该,角色有5个出现.我需要在第4次发生后删除所有内容,以便最终结果为:

string result = fx(sample, 4);
"A, ABC, 1, ACS"
Run Code Online (Sandbox Code Playgroud)

没有一个可能foreach吗?提前致谢.

c# regex linq string

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

RabbitMQ Windows - 自动启动服务器

我们正在 Windows 环境中使用 RabbitMQ。目前我已经安装了 RabbitMQ 并且它作为服务运行。它会自动启动,如下所示:

在此处输入图片说明

但是如果我发送消息或者我在这里查询服务器:http://localhost:15672/#/queues服务器返回404

现在,如果我打开 Shell 并点击以下命令:

rabbitmq-server
Run Code Online (Sandbox Code Playgroud)

服务器启动后,我可以发送和接收消息并浏览管理页面。

问题:

  • 那么RabbitMQ Windows Service 和RabbitMQ Server 有什么区别呢?
  • 如何在 PC 启动时让 RabbitMQ Server 作为守护进程运行?有没有相关的命令或配置?

windows-services rabbitmq

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