小编Sta*_*hev的帖子

什么是比较和交换有益?

我最近在阅读有关Compare和Swap原子动作(CMPXCHG,.NET的Interlocked.CompareExchange,无论如何).

我理解它是如何在内部工作的,以及如何从客户端使用它.

我无法弄清楚的是,何时会有人使用CAS?

维基百科说:

CAS用于实现信号量和互斥量等同步原语,同样是更复杂的无锁和无等待算法.

那么,任何人都可以给我一个更通用的真实世界用例,其中包含CAS使用的代码和描述吗?

这个问题与语言无关,因此任何语言都可以(基于C语言或x86程序集首选).

谢谢!

c c# assembly thread-safety compare-and-swap

14
推荐指数
2
解决办法
3274
查看次数

使用PowerShell将现有项目添加到解决方案文件夹

我正在开发PowerShell脚本,以动态创建Visual Studio项目并将其文件夹和资产添加到解决方案中.我正在使用Visual Studio DTE.

我在文件系统上的目录结构如下:

C:\Dir1\Dir2\Stuff
|
+--Stuff                  <-- folder
|  |
|  `Stuff.csproj          <-- existing project, included in sln
|
+--Subfolder              <-- Subfolder in which I want to include my new csproj
|  +--Project1            <-- folder
|  |  |
|  |  `Project1.csproj    <-- existing project, included in sln
|  |
|  +--Project2            <-- folder
|  |  |
|  |  `Project2.csproj    <-- existing project, included in sln
|  |
|  `--Project3            <-- this, subs below and csproj are created from …
Run Code Online (Sandbox Code Playgroud)

powershell visual-studio envdte

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

WPF DataGrid删除IEditableCollectionView.CancelNew()上的NewItemPlaceholder

概观

我正在开发一个WPF应用程序(使用.NET 4.5),其中一部分涉及在DataGrid中显示一些数据.
用户可以在DataGrid中添加新行,并通过其他位置的按钮删除一行.

当用户开始添加无法提交的新行然后按下删除按钮时,我遇到了问题.
应取消新行并将DataGrid重置为其先前的状态.
但是,DataGrid的NewItemPlaceholder行将被删除,并且不再显示.

我做了一个示例项目来演示这个问题.
是一个简短的截屏视频.
就是示例应用程序的样子.

重现:

  1. 双击最上面一行的价格单元格
  2. 输入无效数字以通过例外触发验证
  3. (可选)选择另一行
  4. 单击"删除"按钮

viewmodel获取ObservableCollection中的数据,ObservableCollection用作集合视图的源.我有一个简单的命令连接到删除按钮.如果用户正在添加项目(IEditableCollectionView.IsAddingNew),我尝试.CancelNew()在collectionView上取消操作.但是,当命令完成时,DataGrid已将其NewItemPlaceholder删除.

到目前为止,我已经尝试过:

  • 触发DataGrid以通过设置再次显示占位符dataGrid.CanUserAddRows = true,这有点修复了问题,但这是一个可怕的解决方法并且它有问题,之后占位符不可编辑.
  • 从源集合中删除无效项:this.productsObservable.Remove(this.Products.CurrentAddItem as Product).
    这不会改变行为,占位符仍然被删除.
  • 从集合视图中删除项目:this.Products.Remove(this.Products.CurrentAddItem).
    抛出异常,这是有道理的:'Remove' is not allowed during an AddNew or EditItem transaction.

有没有其他方法可以取消用户的添加并显示NewItemPlaceholder?

在示例项目中,为了简单起见,我将在VM构造函数中实例化数据.
实际上,我正在使用对服务的异步调用,将结果包装在ObservableCollection中,而ViewModel实现了INotifyPropertyChanged.业务对象未实现INPC.

示例项目的XAML:

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication3"
        Title="MainWindow" Height="250">
    <Window.DataContext>
        <local:ViewModel />
    </Window.DataContext>

    <StackPanel Orientation="Vertical">
        <Button Command="{Binding DeleteCommand}" Content="Delete row" />
        <DataGrid …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf datagrid mvvm

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

查询选项无法应用于请求的资源

我用WPF客户端创建了一个非常简单的.NET 4.0 Web项目。

该Web解决方案具有WCF数据服务,该服务的服务操作返回IQueryable<string>

WPF客户端引用该服务,CreateQuery().Take()直接在查询上直接调用该服务操作。

不幸的是,我收到以下错误消息:

Query options $orderby, $inlinecount, $skip and $top cannot be applied to the requested resource.
Run Code Online (Sandbox Code Playgroud)

如果使用http://localhost:20789/WcfDataService1.svc/GetStrings()?$top=3,在浏览器中查看服务,则会出现相同的错误。

有任何想法吗 ?让我知道是否需要将解决方案上传到某个地方。

谢谢!

WcfDataService1.svc.cs:

namespace WPFTestApplication1
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    public class WcfDataService1 : DataService<DummyDataSource>
    {
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        }

        [WebGet]
        public IQueryable<string> GetStrings()
        {
            var strings = new string[]
            {
            "aa",
            "bb",
            "cc",
            "dd",
            "ee",
            "ff",
            "gg",
            "hh",
            "ii",
            "jj", …
Run Code Online (Sandbox Code Playgroud)

c# wpf wcf wcf-data-services

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