小编joh*_*hnc的帖子

在Unity App.Config文件中包含泛型类

我有一个类型的类ISimpleCache<IBrokeredDataObject>,我想在App.Config文件中添加为类型别名(然后是类型)

这条线

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, MyApplication" />
Run Code Online (Sandbox Code Playgroud)

由于<>显然是错误的,但我不相信逃避它们;

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache&lt;IBrokeredDataObject&gt;, MyApplication" />
Run Code Online (Sandbox Code Playgroud)

也是正确的.

我目前正在将我的代码拆分为使用Unity,因此距离可编译的代码库太远而无法快速测试,并希望在此处得到一些确认.

c# generics app-config unity-container

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

C#volatile双

因为只有引用类型和一些原语(包括float,但不是double,我不确定原因,我很高兴听到原因)可以声明为volatile,如果我在类中包装double然后声明它作为volatile(如下所示),double属性是'read write'线程安全,就像任何其他volatile一样,还是我还应该看看锁定?

public class MyThreadedClass
{
    volatile VolatileDouble voldub;
}

public class VolatileDouble
{
    public double Double { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.net c# volatile

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

如何从我的.NET解决方案构建"依赖关系树图"

我可以轻松地看到单个项目在Visual Studio .NET项目中引用的项目和dll.

是否有任何应用程序或反射可以构建一个完整的依赖树,我可以用它来绘制依赖图形图表?

.net reflection dependencies

9
推荐指数
3
解决办法
9736
查看次数

从传递给C#的F#列表中检索项目

我在C#中有一个函数,它在F#中调用,在a中传递它的参数Microsoft.FSharp.Collections.List<object>.

我怎样才能从C#函数中的F#List中获取项目?

编辑

我找到了一种循环遍历它们的"功能"样式方法,并且可以将它们传递给下面的函数以返回C#System.Collection.List:

private static List<object> GetParams(Microsoft.FSharp.Collections.List<object> inparams)
{
    List<object> parameters = new List<object>();
    while (inparams != null)
    {
        parameters.Add(inparams.Head);
        inparams = inparams.Tail;
     }
     return inparams;
 }
Run Code Online (Sandbox Code Playgroud)

再次编辑

如下所述,F#List是Enumerable,所以上面的函数可以用行代替;

new List<LiteralType>(parameters);
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法按索引引用F#列表中的项目?

.net c# f#

9
推荐指数
2
解决办法
3459
查看次数

是否已弃用SQL Server时间戳以及替换时使用的内容

T-SQL MSDN页面状态

不推荐使用时间戳语法.将在Microsoft SQL Server的未来版本中删除此功能.避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序.

这是否意味着建议SQL Server时间戳数据类型也被弃用?如果是这样,应该使用什么来替换它,因为SQL Server DateTime数据类型不够精细,无法确保高事务记录可以标记唯一值.

sql t-sql sql-server timestamp

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

C#导航到WebBrowser控件中的Anchors

我们的Winforms应用程序中有一个Web浏览器,可以很好地显示xslt呈现的所选项目的历史记录.

xslt在输出的html中写出<a>标签,以允许webBrowser控件导航到所选的历史条目.

因为我们没有在严格的网络意义上"导航"到html,而是通过DocumentText设置html,所以我无法使用#AnchorName"导航"到所需的锚点,因为webBrowser的Url为null(编辑:实际上是完成它是关于:空白).

在这种情况下,如何动态导航到Web浏览器控件的html中的Anchor标签?

编辑:

感谢sdolphion的提示,这是我使用的最终代码

void _history_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        _completed = true;
        if (!string.IsNullOrEmpty(_requestedAnchor))
        {
            JumpToRequestedAnchor();
            return;
        }
    }

    private void JumpToRequestedAnchor()
    {
        HtmlElementCollection elements = _history.Document.GetElementsByTagName("A");
        foreach (HtmlElement element in elements)
        {
            if (element.GetAttribute("Name") == _requestedAnchor)
            {
                element.ScrollIntoView(true);
                return;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# webbrowser-control winforms

9
推荐指数
2
解决办法
5905
查看次数

在.NET 2.0到.NET 4.0升级之后,为什么HttpWorkerRequest在HttpRuntime.ProcessRequest期间失败?

我正在升级我们的应用程序,它有一个内部Web服务器,从.NET 2.0到.NET 4.0.

我正在处理一个带有对象的请求,该对象HttpListenerWorkerRequest扩展了HttpWorkerRequest类,并创建了一个请求,该请求GetRawUrl()返回格式为的Url http://localhost:82/Default.aspx.

在.NET 2.0中,发送它HttpRuntime.ProcessRequest(httpListenerWorkerRequest)可以毫无问题地工作,但是在.NET 4.0中,我得到的网页上只有文本"Bad Request".

破解打开HttpRuntime,我可以看到Bad Requests被抛出ProcessRequestInternal(HttpWorkerRequest wr),一个试图构建HttpContext的私有方法.

我自己尝试过:

try
{
    //what's going on?
    hcontext = new HttpContext(workerRequest);
}
catch(Exception e)
{
    //Debugging break point here
}
Run Code Online (Sandbox Code Playgroud)

预更新(.NET 2.0),它构建良好,更新后(.NET 4.0),我得到一个System.ArgumentException说明

The relative virtual path 'http:/localhost:82/Default.aspx' is not allowed here,扔了

at System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options)
   at System.Web.HttpRequest.get_ClientFilePath()
   at System.Web.Security.CookielessHelperClass.RemoveCookielessValuesFromPath()
   at System.Web.HttpContext.Init(HttpRequest request, HttpResponse response)
   at System.Web.HttpContext..ctor(HttpWorkerRequest wr)
   at Talcasoft.Web.Hosting.HttpWorkerThread.Run(Object request) in      
   C:\[OurLibrary].Web\Hosting\HttpWorkerThread.cs:line 51 …
Run Code Online (Sandbox Code Playgroud)

.net httpruntime

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

测试是否已在Unity中注册了Type

我是否可以测试类型是否已在Unity容器中注册而不调用Resolve并捕获异常?

inversion-of-control unity-container

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

内部控件上的"跨线程操作无效"异常

我一直在努力解决这个问题:我有一个功能,旨在将控件添加到具有跨线程处理的面板,问题是尽管面板和控件在"InvokeRequired = false" - 我得到一个异常告诉我其中一个控件内部控件是从其创建的线程以外的线程访问的,该代码段如下所示:

public delegate void AddControlToPanelDlgt(Panel panel, Control ctrl);
    public void AddControlToPanel(Panel panel, Control ctrl)
    {
        if (panel.InvokeRequired)
        {
            panel.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl);
            return;
        }
        if (ctrl.InvokeRequired)
        {
            ctrl.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl);
            return;
        }
        panel.Controls.Add(ctrl); //<-- here is where the exception is raised
    }
Run Code Online (Sandbox Code Playgroud)

异常消息如下:

"跨线程操作无效:控制'pnlFoo'从其创建的线程以外的线程访问"

('pnlFoo'在ctrl.Controls下)

如何将ctrl添加到面板?!


当代码到达"panel.Controls.Add(ctrl);"时 line - panel和ctrl"InvokeRequired"属性设置为false,问题是ctrl中的控件将"InvokeRequired"设置为true.澄清事情:在基本线程上创建"panel",在新线程上创建"ctrl",因此,必须调用"panel"(导致"ctrl"再次需要调用).一旦完成两个调用,它就会到达panel.Controls.Add(ctrl)命令("panel"和"ctrl"都不需要在这种状态下调用)

这是完整程序的一小部分:

public class ucFoo : UserControl
{
    private Panel pnlFoo = new Panel();

    public ucFoo()
    {
        this.Controls.Add(pnlFoo);
    }
}

public class ucFoo2 : UserControl
{
    private Panel pnlFooContainer = …
Run Code Online (Sandbox Code Playgroud)

c# multithreading winforms

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

.NET确定鼠标在两个任意点之间绘制

我在Winform上的两个对象之间绘制了一个箭头.

确定我的鼠标当前是否在此行上方或附近悬停的最简单方法是什么.

我已经考虑过测试鼠标点是否与由两个点定义和外推的正方形相交,但是只有当这两个点具有非常相似的x或y值时,这才是可行的.

我也在想,这个问题可能更多地出现在线性代数领域而不是简单的三角学领域,虽然我确实记得矩阵的简单方面,但这个问题超出了我对线性代数的认识.

另一方面,如果.NET库可以处理该功能,甚至更好.

编辑 感谢您的回答,有一些非常好的,所有值得被标记为已回答.

我选择Coincoin的答案是被接受的,因为我喜欢它可以应用于绘制的任何形状,但最终实现了Tim Robinson的方程式,因为使用简单的方程而不是新建图形路径和笔似乎更有效,如我的情况我需要在onMouseMove上进行1-n个不同的关系(显然会有一些缓存和优化,但重点仍然存在)

等式的主要问题是它似乎将线条视为无限,因此我也添加了边界测试.

对于那些感兴趣的人来说,代码(初始剪切,我可能会稍微干掉它),如下所示

    if (Math.Sqrt( Math.Pow(_end.X - _start.X, 2) + 
           Math.Pow(_end.Y - _start.Y, 2) ) == 0)
    {
        _isHovering =
            new RectangleF(e.X, e.Y, 1, 1).IntersectsWith(_bounds);
    }
    else
    {
        float threshold = 10.0f;

        float distance = (float)Math.Abs( 
            ( ( (_end.X - _start.X) * (_start.Y - e.Y) ) -
            ( (_start.X - e.X) * (_end.Y - _start.Y) ) ) /
            Math.Sqrt( Math.Pow(_end.X - _start.X, 2) + 
            Math.Pow(_end.Y - _start.Y, 2) ));

        _isHovering = ( …
Run Code Online (Sandbox Code Playgroud)

.net geometry intersection

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