小编Nat*_*han的帖子

如何在ItemsControl中的项之间添加分隔符

我需要在Items Control中显示一个集合中的数字列表.所以这些项目是:"1", "2", "3".

当它们被渲染时,我需要用逗号(或类似的东西)分隔它们.所以上面3个项目看起来像这样:"1, 2, 3".

如何在单个项目中添加分隔符,而不在列表末尾添加一个分隔符?

我并没有停止使用ItemsControl,但这就是我开始使用的东西.

c# wpf itemscontrol

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

锁定跨多个线程使用的对象中的关键部分

我有一个类在任意数量的线程中实例化,根据需要进行假脱机.这意味着可以在任何时候使用此类的任何数量的实例化版本,并且需要锁定此类的一部分以防止并发访问.

为了防止各种线程之间的数据问题,我需要一种方法来锁定其他线程中其他实例化类的代码的一部分代码.由于可以运行此类的多个实例化版本,我不能只使用私有成员变量来锁定(我知道不使用Type或任何可公开访问的内容); 所以我使用了私有静态成员变量.

这是解决这个问题的合理方法吗?或者有更好的解决方案吗?

示例代码如下:

public class MyClass
  {
    private static object LockingVar = new object();

    public void MyPublicMethod()
    {
      lock (LockingVar)
      {
         // Do some critical code
      }
  }
Run Code Online (Sandbox Code Playgroud)

编辑

MyPublicMethod正在调用本地SQLExpress实例,除了更新和插入之外,它还可以执行选择,因此它需要在另一个线程进入之前完成并将其搞砸.

c# locking

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

Service Reference使用Arrays而不是List <Type>,即使设置说使用List也是如此

我正在使用Visual Studio 2010,并且我已经获得了对我们创建的Web服务的服务引用.我们的方法返回包含通用List属性的对象:

public class ExampleResponse
{
  private System.Collections.Generic.List<int> intValues;

  [WCF::MessageBodyMember(Name = "IntValues")]
  public System.Collections.Generic.List<int> IntValues    
  {
    get { return intValues; }
    set { intValues= value; }
  }
}
Run Code Online (Sandbox Code Playgroud)

在客户端,它使用int []而不是List创建一个References.cs文件:

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="SomeNamespace", Order=0)]
[System.Xml.Serialization.XmlArrayAttribute(IsNullable=true)]
[System.Xml.Serialization.XmlArrayItemAttribute(Namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays", IsNullable=false)]
public int[] IntValues;
Run Code Online (Sandbox Code Playgroud)

在服务引用设置上,"集合类型"设置为使用"列表",而不是"阵列".然而,它仍然这样做.

任何有关如何解决这个问题的信息都会非常有用,似乎毫无意义.

c# web-services

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

无法在MSI中运行Wix自定义操作

我正在尝试为我的Wix安装创建一个自定义操作,它只是不起作用,我不确定为什么.

这是适当的Wix文件中的位:

<Binary Id="INSTALLERHELPER" SourceFile=".\Lib\InstallerHelper.dll" />
<CustomAction Id="HelperAction" BinaryKey="INSTALLERHELPER" DllEntry="CustomAction1" Execute="immediate" />
Run Code Online (Sandbox Code Playgroud)

这是我的自定义操作的完整类文件:

using Microsoft.Deployment.WindowsInstaller;

namespace InstallerHelper
{
  public class CustomActions
  {
    [CustomAction]
    public static ActionResult CustomAction1(Session session)
    {
      session.Log("Begin CustomAction1");

      return ActionResult.Success;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

该操作由UI中的按钮按下(现在):

  <Control Id="Next" Type="PushButton" X="248" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" >
      <Publish Event="DoAction" Value="HelperAction">1</Publish>
  </Control>
Run Code Online (Sandbox Code Playgroud)

当我运行MSI时,我在日志中收到此错误:

MSI (c) (08:5C) [10:08:36:978]: Connected to service for CA interface.
MSI (c) (08:4C) [10:08:37:030]: Note: 1: 1723 2: SQLHelperAction 3: CustomAction1 4: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
Error 1723. There is a …
Run Code Online (Sandbox Code Playgroud)

windows-installer custom-action wix

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

Wix:安装期间忽略对话框中的属性更改

我在Wix文件中有一个属性,可以在对话框中进行编辑.在下面的示例中,它是"MyProperty".此属性用于创建注册表项.但是,如果在对话框中更改了属性,则不使用更改的值,但默认值为:"SomeProperty".但是,如果我在另一个对话框中显示该属性,则该值将显示为用户输入的值.

我究竟做错了什么?

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="221ca977-6b1b-4737-a06a-14122f707173" Name="Name" Language="1033" Version="1.0.0.0" Manufacturer="Manu" UpgradeCode="29ad8ab9-e354-46fa-bafa-85cbea5ae526">
    <Package InstallerVersion="200" Compressed="yes" />
    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
    <Property Id="MyProperty" Value="SomeProperty" />
    <Directory Id="TARGETDIR" Name="SourceDir">
       <Component Id="RegistryEntries" Guid="8713D23C-1887-45C1-A90B-C8D0AAFFDA3D">
         <!-- This registry key is always "Software\SomeProperty" -->
          <RegistryKey Id="Test" Root="HKLM" Key="Software\[MyProperty]" Action="createAndRemoveOnUninstall"/>
       </Component>
    </Directory>
    <Feature Id="Feature1" Level="1" Title="Feature">
      <ComponentRef Id="RegistryEntries" />
    </Feature>
    <UI>
      <UIRef Id="WixUI_Common" />

      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
      <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
      <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
      <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> …
Run Code Online (Sandbox Code Playgroud)

wix

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

将大文本文件加载到字符串中

我想要将150 MB的文本文件加载到字符串中.该文件是UTF16编码的,因此它将生成一个内存大约150 MB的字符串.我尝试过的所有方法都会导致Out of Memory异常.

我知道这是一个巨大的字符串,当然不是我想做的事情.但是,目前我无能为力,没有对应用程序进行大量深刻更改即将出门.该文件中没有均匀分布的行集.一行可以包含整个文件大小的80%左右.

这是我尝试过的:

方法1

// Both of these throw Out of Memory exception
var s = File.ReadAllText(path)
var s = File.ReadAllText(path, Encoding.Unicode);
Run Code Online (Sandbox Code Playgroud)

方法2

var sb = new StringBuilder();

// I've also tried a few other iterations on this with other types of streams
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
  string line;
  while ((line = sr.ReadLine()) != null)
  {
    sb.AppendLine(line);
  }
} …
Run Code Online (Sandbox Code Playgroud)

c# string file-handling

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