小编Val*_*zub的帖子

当返回类型不重要时,是否有更优雅的方法来合并observable?

我有一个类似ReactiveUI的视图模型.它有几个不同类型的属性来触发NotifyPropertyChanged事件,我想订阅一个方法,当任何被触发时将被调用,但我对实际值不感兴趣.

我当前的代码有点难看(由于true选择不透明).有没有办法表达这一点,这表明在事件发生时只关心他人的意图?

    this.ObservableForProperty(m => m.PropertyOne)
        .Select(_ => true)
        .Merge(this.ObservableForProperty(m => m.PropertyTwo).Select(_ => true))
   .Subscribe(...)
Run Code Online (Sandbox Code Playgroud)

我正在合并8个属性,所以它比显示的更难看.

c# system.reactive observable reactiveui

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

C#不安全代码固定指针作为参数传递

我在msdn上遇到了以下代码:

        unsafe static void SquarePtrParam (int* p) 
        {
            *p *= *p;
        }

        unsafe static void Main() 
        {
            Point pt = new Point();
            pt.x = 5;
            pt.y = 6;
            // Pin pt in place:
            fixed (int* p = &pt.x) 
            {
                SquarePtrParam (p);
            }
            // pt now unpinned.
            Console.WriteLine ("{0} {1}", pt.x, pt.y);
        }
Run Code Online (Sandbox Code Playgroud)

我只是想知道,我们是直接访问SquarePtrParam函数中的指针,它是否继承了从调用方法修复数组的信息?

为什么我们不需要将其明确地设置为fixed本地SquarePtrParam.

我想我可以对这个fixed陈述进行一些阐述.

c# unsafe fixed

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

在客户端计算机上没有从Silverlight发送WCF请求

我的SL应用程序是商业化的,可以在数百台机器上正常工作.

SL正在使用WCF服务,它按预期工作,但今天我观察到客户端计算机上的行为,实际上没有对服务器进行调用.

单击发送调用的按钮后,会发生一些错误,并且在Fiddler中没有创建有关WCF调用的记录.

错误是:

[HttpWebRequest_WebException_RemoteServer]
Arguments: NotFound
Debugging resource strings are unavailable...
Run Code Online (Sandbox Code Playgroud)

我读到了人们推荐使用Fiddler的错误,但正如我所说,Fiddler中没有显示任何调用

所以问题比我最初的想法更糟糕.

它来来去去.目前我们已经找到了一个可以解决问题的工作解决方案,虽然它对我没有任何意义.

例如,如果我在chrome&mozilla和OOB版本中出现此错误,则在IE中启动程序可以工作,然后在Chrome之后,mozilla和OOB也开始工作.

事情就是这个解决方案解决了这个问题的人在某些日子里再次体验它,比如一周,没有明显的理由,然后来自不同地点的发布组合帮助(通常IE帮助最多).

任何帮助表示感谢,我开始赏金它作为它非常生病的bug,我需要以某种方式修复它.

更新

奇怪的IE修复场景:

在某些时候,OOB版本进入不向服务器发送任何WCF请求的状态.(fiddler没有看到它,服务器没有得到它)​​.在IE中启动Web版本并点击相同的按钮后,发送WCF请求我们在IE Web版本中得到了所需的结果.

在不更改任何其他内容的情况下,只需重新启动之前处于此错误状态的OOB版本,即可使OOB版本正常工作.它没有重新安装,没有改变 - 没有.

这就是我所谓的"IE治愈"这个问题.那么问题是IE可以为OOB版本推出什么样的潜在变化?

silverlight wcf silverlight-4.0

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

OOB Silverlight应用程序究竟如何在Mac上运行?

Silverlight页面表示它将在2017年3月之后无法在所有Mac浏览器上运行,但关于Mac上OOB Silverlight未来的问题根本不清楚.

所以问题是,OOB应用程序如何在Mac上运行?他们是否使用Safari来运行,并且应该在2017年3月之后停止工作?它们是否独立于浏览器运行并且即使在浏览器支持不再可用之后仍将继续工作?

macos silverlight silverlight-oob

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

SL4文本框上的IsTabStop = False

我在文本框中将IsTabStop设置为false,我知道这会使控件无法获得焦点,但根据Silverlight论坛,它应该仍然能够接收鼠标事件.我在我的tbxTotal_MouseLeftButtonUp方法中连接了MouseLeftButtonUp事件和断点,并且它在调试期间永远不会被命中.SL论坛中的线程现在已经很老了,所以也许这在某个地方更新了.我想要一个无法选项卡的文本框,但仍然可以编辑.真的应该这么难吗?

silverlight tabstop silverlight-4.0

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

当没有使用order by时,Linq to objects是否加入了指定的默认顺序?

我得到了以下查询

IEnumerable<string> values = from first in goodOrdered
join second in badOrdered on first.ToLower() equals
second.ToLower()
select second;
Run Code Online (Sandbox Code Playgroud)

目前我的测试显示最终结果实际上是goodRrdered,就像我想要的那样.我可以期望永远是真的,或者我应该提供一个强制订单顺序的命令(它会使查询更复杂,因为goodOrdered可能看起来像1,9,2,7,6)?

.net c# linq linq-to-objects

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

线程同步.为什么这个锁不足以同步线程

可能重复:
线程同步.完全锁定如何使内存访问"正确"?

这个问题的灵感来自于这个问题.

我们有一个以下的测试课程

class Test
{
    private static object ms_Lock=new object();
    private static int ms_Sum = 0;

    public static void Main ()
    {
        Parallel.Invoke(HalfJob, HalfJob);
        Console.WriteLine(ms_Sum);
        Console.ReadLine();
    }

    private static void HalfJob()
    {
        for (int i = 0; i < 50000000; i++) {
            lock(ms_Lock) { }// empty lock

            ms_Sum += 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

实际结果非常接近预期值100 000 000(50 000 000 x 2,因为2个循环同时运行),差异大约为600 - 200(我的机器上的误差约为0.0004%,非常低).没有其他同步方式可以提供这种近似方式(它要么是更大的错误%,要么是100%正确)

我们目前理解这种精确程度是因为程序以下列方式运行:

在此输入图像描述

时间从左到右运行,2个线程由两行表示.

哪里

  • 黑匣子代表获取,持有和释放的过程

  • lock plus表示加法操作(架构表示我的PC上的比例,锁定大约比添加的时间长20倍)

  • 白框表示由试图获取锁定,并进一步等待它变得可用的时期

锁也提供完整的内存栅栏.

所以现在的问题是:如果上面的模式代表了正在发生的事情,那么这个大错误的原因是什么(现在它的大原因模式看起来非常强大的同步模式)?我们可以理解1-10之间的界限差异,但它显然不是错误的唯一原因吗?我们无法看到何时可以同时发生对ms_Sum的写入,从而导致错误.

编辑:很多人喜欢快速得出结论.我知道同步是什么,如果我们需要正确的结果,那么上面的构造不是真正的或接近好的同步线程的方法.对海报有一些信心,或者先阅读相关的答案.我不需要同步2个线程来并行执行添加的方法,我正在探索这种奢侈而又高效的方法,与任何可能的和 …

.net c# multithreading locking

6
推荐指数
2
解决办法
1187
查看次数

由于maxReceivedMessageSize仍为65536,因此可怕的WCF BAD请求400

上帝,你不喜欢WCF.

我读了所有可能的线程,但我现在真的被卡住了.

这是WCF配置:

<system.serviceModel>
   <bindings>
      <basicHttpBinding>
         <binding name="BaseHttp" 
                  maxBufferSize="4194304" 
                  maxBufferPoolSize="4194304" 
                  maxReceivedMessageSize="4194304"  />
      </basicHttpBinding>
   </bindings>
   <behaviors>
      <serviceBehaviors>
         <behavior name="TaskServiceBehavior">
            <serviceMetadata httpGetEnabled="True" />
            <serviceDebug includeExceptionDetailInFaults="True" />
         </behavior>
         <behavior name="">
            <serviceMetadata httpGetEnabled="true" />
         </behavior>
      </serviceBehaviors>
   </behaviors>
   <services>
      <service behaviorConfiguration="TaskServiceBehavior" name="TaskService">
         <endpoint 
             address="http://www.mysite.com/TableTaskService/TableTaskService.svc" 
             binding="basicHttpBinding" bindingConfiguration="BaseHttp" 
             contract="TableTaskService.ITableTaskService" />
         <endpoint 
             address="mex" 
             binding="mexHttpBinding"  
             contract="IMetadataExchange" />
         <host>
            <baseAddresses>
               <add baseAddress="http://www.mysite.com/TableTaskService/" />
            </baseAddresses>
         </host>
      </service>
   </services>
   <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
         <add prefix="http://www.mysite.com/" />
      </baseAddressPrefixFilters>
   </serviceHostingEnvironment>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

现在我发送一条消息并抛出这个默认异常(在svclog文件中看到):

已超出传入邮件的最大邮件大小限额(65536).要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性.

现在我清楚地说它应该是4mb.

我的客户代码:

TableTaskServiceClient client = 
    new TableTaskServiceClient(
          new BasicHttpBinding { MaxBufferSize = 4194304, …
Run Code Online (Sandbox Code Playgroud)

wcf http-status-code-400

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

是否可以指定代码协定以确保方法不会更改对象的状态

可以说IsValid我的对象上有一个布尔属性.

我想创建一个方法,并确保在调用之后不更改IsValid,无论是在调用之前它是真还是假.

这样的事情有支持吗?

c# code-contracts

6
推荐指数
2
解决办法
385
查看次数

使用IoC容器的OOD - 如何构建依赖对象?

我正在尝试使用IoC,DI和OOD以获得更好的可测试性和更松散的耦合.

因此,当我们设计大量使用IoC和DI的类时,我们可以使用具有多个依赖项的类来结束

class Processor
{
    private IService1 m_Service1;
    private IService2 m_Service2;
    private IService3 m_Service3;

    //approach 1 
    public Processor(IService1 service1, IService2 service2, IService3 service3)
    {
        m_Service1 = service1;
        m_Service2 = service2;
        m_Service3 = service3;
    }
    //approach 2
    public Processor(IContainer container)
    {
        m_Service1 = container.Resolve<IService1>();
        m_Service2 = container.Resolve<IService2>();
        m_Service3 = container.Resolve<IService3>();
    }

    //approach 3
    public delegate Processor Factory();

}
Run Code Online (Sandbox Code Playgroud)

我在想这里应该采用什么方法.我们可以给构造函数留下3个参数,但是如果我们使用autofac构建应用程序(例如),很可能除了从某些容器实例中解析类型之外很少使用它

    Processor proc = new Processor(
 container.Resolve<IService1>(),
 container.Resolve<IService2>(),
 container.Resolve<IService3>());
Run Code Online (Sandbox Code Playgroud)

所以当我们依赖容器中的多种类型时,我想也许方法2更好.无论如何,我们将不得不在某处添加autofac的引用,所以任何理由现在都不要这样做?

Autofac还提供委托工厂方法方法

http://code.google.com/p/autofac/wiki/DelegateFactories

var processorFactory = container.Resolve<Processor.Factory>();
Processor processor = processorFactory.Invoke();
Run Code Online (Sandbox Code Playgroud)

所以我们也有方法3 - 我们不会使用构造函数来创建我们的类实例,而是我们将从容器中调用已解析的委托,它将为我们解析依赖关系. …

c# oop dependency-injection inversion-of-control autofac

5
推荐指数
2
解决办法
418
查看次数