小编Jas*_*ban的帖子

在2010年取消"无源可用"窗格

精氨酸!我有一个运行我的类库项目的自定义"harness"可执行文件.每次我进入线束的代码,我都会弹出"No Source Available"窗格.据我所知,没有可用的资源,并且这是完全可以预期的,我不希望每次都会出现这个非常具有侵入性和无用的窗格.我怎么能完全抑制它呢?

我可以使它变小,至少使该窗口成为另一个较小的窗格集的一部分,例如使用watch/locals.它记得它从一开始到另一个运行的位置,但它仍然无用.

这个问题可能有一个更一般的答案 - 如何抑制任何特定的窗格/窗口显示?我有一个VSX软件包,最初是为VS 2008构建的(并且必须保持兼容性),但我只是不知道要运行什么命令来执行它.(我有包装委托,所以我有源,但不是技术诀窍.这看起来像一个/两个班轮).

谢谢!

vsx visual-studio-2010 vspackage

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

SslStream相当于TcpClient.Available?

根据@ Len-Holgate 在这个问题中的建议,我异步请求0字节读取,并且在回调中,接受字节可用字节和同步读取,因为我知道数据是可用的并且不会阻塞.这看起来非常有效和精彩.

但后来我为SslStream添加了选项,并且方法崩溃了.零字节读取很好,但是SslStream解密字节,在TcpClient的缓冲区中保留零字节计数(恰当如此),我无法确定SslStream中现在有多少字节可用于读取.

有一个简单的伎俩吗?


一些代码,仅用于上下文:

sslStream.BeginRead(this.zeroByteBuffer, 0, 0, DataAvailable, this);
Run Code Online (Sandbox Code Playgroud)

在EndRead()(正确返回0)之后,DataAvailable包含:

// by now this is 0, because sslStream has already consumed the bytes
available = myTcpClient.Available; 

if (0 < available) // Never occurs
{
    // this part can be distractingly complicated, but 
    // it's based on the available byte count
    sslStream.Read(...); 
}
Run Code Online (Sandbox Code Playgroud)

由于协议,我需要逐字节评估和解码可变字节宽度的unicode和东西.我不想异步读取逐字节!

c# asynchronous tcpclient sslstream

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

C#静态分析,变量/参数的可能值

在类似于以下每个示例的代码中,我希望能够静态分析代码以确定传递给SpecialFunction()的可能值列表.

SpecialFunction(5); // A

int x = 5;
SpecialFunction(x); // B

int x = 5;
x = condition ? 3 : 19;
SpecialFunction(x); // C
Run Code Online (Sandbox Code Playgroud)

我已经可以将C#解析成一个抽象语法树了,我已经可以处理像A这样的情况了,我想我可以跟踪值的初始赋值来猜测案例B,但像C一样简单的情况似乎很快就会变得复杂.

我几乎可以肯定,我们无法在所有情况下静态地解决x问题,这没关系.我想知道尝试它的策略,以及识别何时无法完成的方法.如果我们需要包含类级别字段和多线程,该怎么办?闭包?它是否有助于如果我们知道,集合X了所有可能的值x,|X| < 50

从@Vladimir Perevalov的建议来看,Pex中的概念如何应用于寻找目标代码点的可能值(而不是Pex似乎做的是发现代码路径和值导致未检查(?)异常情况)?

c# static-analysis pex c#-5.0 roslyn

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

配置WCF以仅侦听LOCALHOST

类似于Visual Studio开发Web服务器(Cassini)限制它只在localhost上服务,我有一个只在localhost上需要的WCF服务实现.

除了Windows防火墙提示允许程序侦听面向外部的NIC之外,我不介意其他机器具有访问权限.由于这仅在内部需要,我宁愿限制WCF服务器端配置,以便它不会使防火墙检测器跳闸.

binding.HostNameComparisonMode = HostNameComparisonMode.Exact正确的解决方案吗?我不明白这是多么的充分.

====

与Cassini一样,此服务实现是其他需要网络通信的替代方案.客户端可以配置为连接到真实服务器或在localhost上运行的虚假实现.

wcf localhost

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

GraphViz C#interop偶尔会导致AccessViolationException

在ImplicitOperator中使用David Brown的可下载示例我将一个经常工作的DOT文件的GraphViz渲染器组合到一个内存中的图像中.

不幸的是,我的版本因为我已经使用IIS 7 ASP.NET Web应用程序的8次执行中的1次失败率而失败.我知道DOT文件数据是一致的,因为我将失败的实例与工作实例,它们是相同的.

由于大卫的网站似乎暗示博客的未来不确定,我将在这里重新打印互联网文章.希望他不介意.失败是在示例的末尾,在第三个语句集的RenderImage中.我已经注意到// TODO的失败行:......失败总是发生在那里(如果它发生的话).通过这一行,g和gvc指针不为零,并且正确填充了布局字符串.

我真的不希望任何人在运行时调试它.相反,我希望对互操作代码的一些静态分析可能会揭示问题.我想不出任何先进的编组技术 - 两个IntPtrs和一个字符串不需要很多帮助,对吧?

谢谢!

旁注:我看了一下MSAGL的试用版,我没有留下深刻的印象 - 微软99美元,我希望节点布局和/或文档的更多功能可以解释我所缺少的内容.也许我从QuickGraph到AGL的快速端口不公平地偏向于我的经验,因为这些方法存在一些根本的差异(例如,以边缘为中心与以节点为中心).

public static class Graphviz
{
  public const string LIB_GVC = "gvc.dll";
  public const string LIB_GRAPH = "graph.dll";
  public const int SUCCESS = 0;

  /// <summary> 
  /// Creates a new Graphviz context. 
  /// </summary> 
  [DllImport(LIB_GVC)]
  public static extern IntPtr gvContext();

  /// <summary> 
  /// Releases a context's resources. 
  /// </summary> 
  [DllImport(LIB_GVC)]
  public static extern int gvFreeContext(IntPtr gvc);

  /// <summary> 
  /// Reads a …
Run Code Online (Sandbox Code Playgroud)

c# graphviz access-violation

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

在所有情况下都必须调用EndRead()吗?

与使用(双向)NetworkStream的异步IO相关,MSDN表示"每次调用BeginRead都必须调用一次EndRead".

即使在EndRead()将抛出异常的情况下也是如此,例如在发布BeginRead()之后NetworkStream已关闭的情况下?

我不想要抛出异常的开销,但我也不想泄漏BeginRead()保留的OS宝贵资源.

我也知道流可以在流的状态测试和条件EndRead()之间关闭,但是如果我们知道流被关闭时可以省略EndRead(),那么将节省大多数情况下的异常处理.

我做错了吗?

谢谢!

asynchronous asyncsocket

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

AppDomain.Unload()如何中止线程?

根据muliple资源(例如,通过C#的MSDN和CLR),当我们调用AppDomain.Unload(userDomain)时,userDomain中的线程将被强制抛出ThreadAbortException,这不能是sttile untile我们调用Thread.ResetAbort.所以我尝试了以下代码来证明我的不足.在默认域中创建的一个线程运行以下代码来调用在另一个域(即用户域)中创建的FooType的fooType对象

    void ThreadRun(object o)
    {       
           try 
           {
                // this call will cross the App domain;
                foo.Run();
            }
            catch (AppDomainUnloadedException EXP)
            {                    
                 Console.WriteLine("Get appdomain unload exception");
            }
            catch (ThreadAbortException EXP)
            {                    
                Console.WriteLine("Get threadAbortException in ThreadRun");
            }
            Console.WriteLine("Strange, this thread is still alive");
     }
Run Code Online (Sandbox Code Playgroud)

下面列出了Foo.Run代码(除了睡眠之外什么都不做)

public class FooType : MarshalByRefObject {
  public void Run()
  {
    try
    {
        Console.WriteLine("Foo.Run is running at " + Thread.GetDomain().FriendlyName);
        Thread.Sleep(TimeSpan.FromSeconds(1500));
    }
    catch (ThreadAbortException)
    {
        Console.WriteLine("get thread abort exception");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试卸载userDomain,我很惊讶ThreadAbortException仅在FooType:Run()(在userDomain中)中捕获,而不是在ThreadRun()方法(在defaultDomain中)中捕获.而ThreadRun()只获取AppDomainUnlo adException,然后继续运行.

如果我试图在不卸载域的情况下直接中止线程,则ThreadAbortException在两个地方都有效.

我想知道这种差异应该发生吗?非常感谢

.net c# appdomain

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

RAII,unique_ptr和out参数

我是一名试图学习C++ 11的C#开发人员.我正在尝试使用windns.h查询DNS.

我开始DnsQuery()并阅读,我需要释放结果记录输出参数DnsRecordListFree().C#方式可能是使用try-finally块来确保我释放资源,无论如何.

但是我了解到没有finally阻塞,并且windns.h真的应该与时俱进并实现符合RAII标准的接口(据我理解的典型建议).我试图创建一个RAII包装器类,而不是等待它发生,我试图使用析构函数调用DnsRecordListFree()并使用运算符重载转换来获取原始指针.

但我对如何正确使用此句柄或指针获取out参数感到困惑.在我研究的过程中,我学会了如何unique_ptr(我已经学过一些东西)可以与自定义删除器一起使用.

所以这是我迄今为止的简单代码.可能更多的错误不仅仅是这个,但我想我可以声明另一个PDNS_RECORD *presult并使用它作为out参数然后复制或移动或以其他方式将其值分配给a unique_ptr,但这听起来像是太多的工作/混乱.

在我看来,unique_ptr内部指针应该初始化为NULL,我应该能够以某种方式将指针的地址传递给out参数,这DNSQuery将更新原始值,当unique_ptr我的函数中的范围超出范围时,DnsRecordListFree()调用将自动制作.我不知道为了最小的正确/安全使用找出正确的组合.

#include <iostream>
#include <fstream>
#include <memory>
#include <Windows.h>
#include <WinDNS.h>

using namespace std;

auto pdnsDeleter = [&](PDNS_RECORD *ptr){ if (ptr) DnsRecordListFree(ptr); };

int main(int argc, char **argv)
{
    cout << "Hello World\n";

    std::unique_ptr<PDNS_RECORD*, decltype(pdnsDeleter)> results(0, pdnsDeleter);

    if (DnsQuery(L"google.com", DNS_TYPE_A, DNS_QUERY_STANDARD, NULL, ??results??, NULL))
    {
        cout << …
Run Code Online (Sandbox Code Playgroud)

c++ winapi out-parameters dynamic-memory-allocation

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

IDisposable,ObjectDisposedException和线程安全类型

bool disposed为了ObjectDisposedException在所有主要暴露方法的开头有条件地抛出一个线程安全类型,有没有必要跟踪经典字段?

我已经在网上的几个地方看到了这种模式,但我不确定作者是否正确使用它,所以这个问题假定它们是.

在这种情况下,似乎disposed除了条件评估之外确保条件为真的唯一方法是在每个公开成员的整个主体上使用诸如lock()之类的同步机制,包括Dispose(bool)方法.难道这不会使类型再次有效地单线程吗?

如果这是真的,那么使用它就没有意义了,因此你不能在某些IDisposable实现中依赖ObjectDisposedException机制 - 那么为什么我们不采用这种机制,如果没有必要呢?

====

我猜IDisposable和ObjectDisposedException只是不一起用于线程安全类型.

c# idisposable thread-safety objectdisposedexception

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

自定义模板化asp.net控件的双向数据绑定

这个问题最初是关于双向绑定工作,但由于缺乏具体的答案和其他方面的进展,我一直在更新它 - 你可以检查编辑历史,但我认为这是更好的明晰.

下面的代码列表允许单个对象与模板化控件进行双向数据绑定.我想以最简单的方式扩展此示例,以允许为最根对象的复杂类型属性嵌套类似的双向数据绑定启用的模板化控件.例如,SampleFormData有一个属性List<string> Items.我希望能够在最根本模板(从此代码清单)中绑定到此列表,并在可编辑的文本框列表中显示字符串数据,可能还有插入,删除,重新绑定输入的命令-changes(返回绑定对象的List属性).此外,如果这是一个复杂类型的列表(SampleFormChildData而不是字符串),则SampleSpecificEntryForm可以在列表中使用新的嵌入式,绑定到每个列表的项目,如转发器.如果作者如此选择,那么直到叶子简单的属性.ui-fields不需要自动生成,只能用于绑定.

注意:这种情况List<string>很特殊,因为即使内置绑定也不能直接处理字符串作为DataItem - 直接绑定到字符串作为列表中的项目不是必需的,但肯定是有价值的.

这与a不同,FormView因为它不是为了期望绑定到项目列表中的一个,而是仅绑定到在viewstate中持久存在的单个项目.与FormView不同,它只有一个类似于FormView的EditTemplate的默认模板.同样,绑定到类似集合的属性也只有一个视图 - 编辑.没有选择行然后编辑.一切都是可编辑的.目的是使双向绑定表单更容易构建.

在我看来,应该有两种绑定. SingleEntityBindingCollectionBinding. SingleEntityBinding将单个对象实例作为数据源(作为原型SampleSpecificEntryForm),同时CollectionBinding可以绑定到它的父级SingleEntityBinding,其属性DataSourceID="EntryForm1" DataMember="Items"DataList1下面的代码示例中所示.任何一种类型都应支持任一类型的嵌套.对支持对象的数据进行插入/更改/删除类型操作等列表操作是表单作者的责任; 但是,这种机制实施起来相对简单.

这是一些代码,希望它能帮到某些人.对于这个布局目标,最好的建议是200分......

using System.ComponentModel;
using System.Collections.Specialized;
using System.Collections.Generic;

namespace System.Web.UI.WebControls.Special
{
    [Serializable]
    public class SampleFormData
    {
        public string SampleString { get; set; }
        public int SampleInt { get; set; }
        public List<string> Items { get; set; }

        public SampleFormData() …
Run Code Online (Sandbox Code Playgroud)

c# asp.net ibindabletemplate 2-way-object-databinding

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