小编Kar*_*gha的帖子

代码中的WPF自动高度

如何将HeightC#代码中WPF控件的属性值设置为" Auto"?

<Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>
Run Code Online (Sandbox Code Playgroud)

我想在后面的代码中重现此行为.有任何想法吗?

c# wpf xaml

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

你会建议在WPF中构建这样的控件吗?

我需要构建一个看起来与此类似的WPF控件: alt text http://img251.imageshack.us/img251/6857/circle.png

每种颜色应该可点击和调整大小(或可选择).

此控件将用于设置一天中的小时模式.我已经考虑过将24个按钮排成一个圆圈:

alt text http://img684.imageshack.us/img684/2184/buttonsk.png

另一个想法是绘制一个完整的圆并计算用户鼠标点击选择的位置,并绘制几个圆圈来表示数据.

关于如何构建这个的任何其他/更好的想法?(请原谅我糟糕的画作).

c# wpf custom-controls wpf-controls

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

MSIL操作码是原子的吗?

我正在玩MSIL反编译器 - ILDASM,我试图反编译一个简单的.NET方法.

操作码看起来像这样:

.method private hidebysig static int32  Add(int32 a,
                                            int32 b) cil managed
{
  // Code size       18 (0x12)
  .maxstack  2
  .locals init ([0] int32 c,
           [1] int32 d,
           [2] int32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  ldc.i4.5
  IL_0003:  add
  IL_0004:  stloc.0
  IL_0005:  ldarg.1
  IL_0006:  ldc.i4.s   10
  IL_0008:  add
  IL_0009:  stloc.1
  IL_000a:  ldloc.0
  IL_000b:  ldloc.1
  IL_000c:  add
  IL_000d:  stloc.2
  IL_000e:  br.s       IL_0010
  IL_0010:  ldloc.2
  IL_0011:  ret
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是 - 这些操作码是原子的吗?即在抢占式调度内核中,单个操作码在完成执行之前是否有可能被抢占?这里的操作码可以很容易地以1:1的方式映射到asm指令,因为它们具有用于加载,存储,添加等的单独操作码.

但是在更复杂的操作码的情况下呢?比如"call",当操作数是一个方法引用标记时,应首先遵循该方法来解析该方法然后调用?是原子吗?

.net multithreading cil atomic

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

NHibernate自定义集合类型

我正在调用一个实体对象,Patient并且该实体具有一个名为Visitstype 的属性VisitsCollection.

VisitsCollections是一个子类,IList<Visit>但它也为集合添加了一些自定义逻辑(如自动排序,一些验证,通知等).

需要使用自定义集合类型,因为它会将一些数据添加到添加到集合中的实体,并透明地执行其他一些文书工作.

现在我想在NHibernate中映射它,所以我创建了:

<list name="Visits" lazy="true" fetch="select">
    <key foreign-key="PatientId" />
    <index column="Timestamp" />
    <one-to-many class="Visit" not-found="ignore"/>
</list>
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

无法将'NHibernate.Collection.PersistentList'类型的对象强制转换为'... VisitsCollection'

每当我访问访问属性.

我也尝试过以这种方式映射它:

<list name="Visits" lazy="true" fetch="select" collection-type="VisitsCollection">
    <key foreign-key="PatientId" />
    <index column="Timestamp" />
    <one-to-many class="Visit" not-found="ignore"/>
</list>
Run Code Online (Sandbox Code Playgroud)

但是,我还是得到了这个例外:

自定义类型未实现UserCollectionType:..... VisitsCollection

我不想VisitsCollection从任何NHibernate类型继承我,因为集合类是我希望它与DAL无关的框架的一部分(因为它将在许多场景中使用 - 不仅仅用于数据库).

关于如何映射这个,保留我的代码结构的任何想法?

提前致谢.

collections nhibernate nhibernate-mapping nhibernate-collections

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

可怜的unordered_map插入性能/哈希函数

我现在一直在编写一个图像处理算法,在某些时候我需要收集一些关于转换像素的统计信息,以便更深入地了解我应该遵循的进一步开发方向.我需要收集的信息格式如下:

key: RGB value
value: int
Run Code Online (Sandbox Code Playgroud)

我做了什么,是我打开转换后的图像并迭代它,保存我需要的值std::unordered_map,具有以下签名:

typedef std::unordered_map<boost::gil::rgb8_pixel_t, unsigned int> pixel_map_t;
Run Code Online (Sandbox Code Playgroud)

在循环中:

for(int y = 0; y < vi.height(); y++) {
    SrcView::x_iterator dst_it = src.row_begin(y);
    for(int x = 0; x < vi.width(); x++, hits++) {
        diff_map.insert(std::make_pair(dst_it[x], /* some uint32 */));
    } 
Run Code Online (Sandbox Code Playgroud)

我还编写了一个自定义哈希函数(它是一个完美的哈希函数:256^2 x R + 256 x G + B- 所以无论桶和哈希表的布局如何,冲突都应该是最小的(合理的扩展).

我注意到的是,插入速度非常慢! - 在达到第11次迭代后,插入速度降低约100倍.我发生了大量的碰撞!尽管图像中的重复颜色数量非​​常少.

之后,我想消除代码中的任何可能的错误,并开始unordered_map使用原始键类型(如int)对STL哈希函数进行基准测试.

该基准的代码是:

std::size_t hits = 0, colls = 0;
for(int y = 0; y < vi.height(); y++) {
    SrcView::x_iterator …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map hashtable c++11

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

vector :: erase和reverse_iterator

我在std :: vector中有一个元素集合,它们从第一个元素开始按降序排序.我必须使用向量,因为我需要将元素放在连续的内存块中.我有一个集合,其中包含许多具有所述特征的向量实例(总是按降序排序).

现在,有时,当我发现我在更大的集合中有太多元素(持有这些向量的元素)时,我丢弃这些向量中的最小元素,类似于这个伪代码:

grand_collection: collection that holds these vectors
T: type argument of my vector
C: the type that is a member of T, that participates in the < comparison (this is what sorts data before they hit any of the vectors).

std::map<C, std::pair<T::const_reverse_iterator, std::vector<T>&>> what_to_delete;
iterate(it = grand_collection.begin() -> grand_collection.end())
{
     iterate(vect_rit = it->rbegin() -> it->rend())
     {
         // ...
          what_to_delete <- (vect_rit->C, pair(vect_rit, *it))
          if (what_to_delete.size() > threshold)
               what_to_delete.erase(what_to_delete.begin());
         // ...  
     }
}
Run Code Online (Sandbox Code Playgroud)

现在,在运行此代码之后,what_to_delete我有一组迭代器指向我想从这些向量中移除的原始向量(总体最小值).请记住,原始向量在它们命中此代码之前进行排序,这意味着对于任何what_to_delete[0 - …

c++ iterator stl vector

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

实现自定义Windows身份验证包

我正在为Windows 7的MSV1_0构建一个自定义身份验证子包.我已经使用了Windows SDK中的msvsubauth示例,我对我遇到的一些问题有两个问题:

  1. 当我正在尝试确保调用例程get并将注册表中的Auth0属性设置为我的包并在创建文件的Msv1_0SubAuthenticationRoutine末尾添加一个简单代码:

    //
    // Cleanup up before returning.
    //
    
    
    Cleanup:
    hTestFile = CreateFile(
                  TEXT("C:\\lsa\\lsa.txt"), 
                  GENERIC_READ|GENERIC_WRITE, 0, 
                  NULL, CREATE_ALWAYS, 
                  FILE_ATTRIBUTE_NORMAL, NULL);
    
    
    if(hTestFile != INVALID_HANDLE_VALUE) {
          CloseHandle(hTestFile);
    }
    
    
    return Status;
    
    
    }  // Msv1_0SubAuthenticationRoutine
    
    Run Code Online (Sandbox Code Playgroud)

    显然,包被调用,因为当我输入我的密码时,我收到来自windows的错误消息"参数不正确"这是一个好兆头.但为什么我会收到这个错误?当从单独的.exe文件执行完全相同的代码时,它运行完美并创建测试文本文件.我检查了权限并为"所有人"设置了"完全控制".有任何想法吗?SDK没有明确提到LSA为auth包中的代码创建了什么样的隔离.

  2. 第二个问题是测试AP.目前,每次更改我都会重建库,将其复制到测试VM,然后复制到System32文件夹并重新启动它.有更简单的方法吗?

预先感谢!

c++ windows winapi local-security-authority

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

奇怪的printf行为

        std::vector<DWORD64> v;
        for(size_t i = init; i < pageSize; ++i)
            v.push_back(i);

        DWORD64 last =  *(v.rbegin());
        DWORD64 first = *(v.begin());

        printf("%d %d \n", last, first);
        printf("%d %d \n", first, last);
Run Code Online (Sandbox Code Playgroud)

输出:

4095 0
0 0
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这个printf表现得那样?init或pageSize都不是0.我理解%d对无符号long long无效,但令我困扰的是当参数的顺序改变时printf的行为会发生变化.

c++ iterator stl

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

单元测试的详细程度

我想开始讨论你在单元测试中提到的细节.

您是否测试了主要功能,包括几种方法一次完成一项任务?或者你甚至可以测试自动属性?

因为,例如,我认为编写仅测试此测试的测试没什么价值:

   public Email
   {
      set
      {
         if(Regex.Match(/*....*/))
             email = value;
      }
      get
      {
        return email;
      }
   }
Run Code Online (Sandbox Code Playgroud)

因为它非常清楚,这只是浪费时间.通常当我进行单元测试时,我会测试整个任务 - 就像这个例子一样 - 整个注册过程.

我问这个是因为,目前我正在阅读Jimmy Nilsson撰写的"应用领域驱动设计和模式"一书,他在那里指出他正在用专门的测试测试这些小细节.

这种覆盖水平是否过度使用?

tdd junit nunit unit-testing

3
推荐指数
2
解决办法
356
查看次数

ruby和C#之间SHA哈希的差异

我正在开发一个使用一些REST Web服务的应用程序.它的技术文档说我应该在请求中传递一些字符串的SHA256哈希值.

在示例请求中(在文档中)一个字符串:

HN-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires = 1893013926label [0] =任何/ somestatistics = 1D,2D,7D,28D,30D,31D,lifetimestatus = UPL,livetitle =一

执行后:

digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')
Run Code Online (Sandbox Code Playgroud)

导致哈希:

YRYuN2zO + VvxISNp/vKQM5Cl6Dpzoin7mNES0IZJ06U

这个例子是ruby,因为文档适用于ruby开发人员.

当我执行时,我正在用C#和完全相同的字符串开发我的应用程序:

byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);
Run Code Online (Sandbox Code Playgroud)

并删除尾随的"="符号,我得到:

Vw8pl/KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw

因此,应用程序无法执行导致签名不匹配错误.

我已经尝试在将字符串转换为散列之前的字节数组时更改编码,并且没有任何更改.

有任何想法吗?

c# ruby hash sha256

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