小编jnm*_*nm2的帖子

相当于VB在C#中的自定义RaiseEvent块?

(我知道标题听起来很容易,但坚持 - 这可能不是你认为的问题.)

在VB.NET中,我能够编写自定义事件.举个例子,我有一个单独的线程会定期引发事件,在那个事件上需要更新GUI.我不希望繁忙的线程打扰UI计算,我不想把Me.Invoke(Sub()...)放在事件处理程序中,因为它也是从GUI线程调用的.

我想出了这个非常有用的代码.GUI线程将设置EventSyncInvoke = Me(主窗体).然后线程可以像往常一样简单地引发事件TestEvent,没有特殊代码,它将在GUI线程上无缝执行:

Private TestEventDelegate As EventHandler
Public EventSyncInvoke As System.ComponentModel.ISynchronizeInvoke

Public Custom Event TestEvent As EventHandler
    AddHandler(value As EventHandler)
        TestEventDelegate = [Delegate].Combine(TestEventDelegate, value)
    End AddHandler

    RemoveHandler(value As EventHandler)
        TestEventDelegate = [Delegate].Remove(TestEventDelegate, value)
    End RemoveHandler

    RaiseEvent(sender As Object, e As System.EventArgs)
        If EventSyncInvoke IsNot Nothing Then
            EventSyncInvoke.Invoke(TestEventDelegate, {sender, e})
        Else
            TestEventDelegate.Invoke({sender, e})
        End If
    End RaiseEvent
End Event
Run Code Online (Sandbox Code Playgroud)

现在在C#中,我可以做到这一点:

public event EventHandler TestEvent
    add
    {
        testEventDelegate = (EventHandler)Delegate.Combine(testEventDelegate, value);
    }
    remove
    {
        testEventDelegate = (EventHandler)Delegate.Remove(testEventDelegate, value); …
Run Code Online (Sandbox Code Playgroud)

c# events

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

extern修饰符对事件的目的是什么?

在浏览C#语言规范5.0时,我意识到您可以定义一个extern event.我习惯于平台调用和本机回调的外部方法.我在.NET世界的11年里没有遇到过这个概念.

  • 什么是一个extern事件与互操作?
  • 它是否提供订阅某些本机事件的能力?
  • 你能举这样的活动吗?
  • 它在C#语言中取得了哪些问题?

我搜索了'extern'的规范,发现属性,索引器,构造函数,静态构造函数,终结符(!)甚至运算符(!)都可以extern.字段不能.(我还了解到命名空间别名可以是'extern',但它意味着完全不同的东西.)

编辑:澄清事情.因此,extern不适用于事件概念或财产概念,而是适用于组成方法.那是对的吗?COM事件与事件有什么不同DllImport

.net c#

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

ScaleOut vs Ncache?

我正在评估这些第三方供应商的分布式缓存.有没有人比较过他们并形成了哪个更好的意见?

ncache

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

.NET可移植类库中的.ToShortDateString发生了什么

我想知道为什么.ToShortDateString.NET可移植类库中没有.我有两个使用相同代码的项目(Silverlight和常规.NET类库),代码涉及调用.ToShortDateString()一个DateTime对象.为了重用相同的代码而不是在两个地方复制它,我创建了一个可移植的类库,因此它可以由Silverlight和.NET类库导入.不幸的是,.ToShortDateString()使用类库时似乎不可用.我可以在可移植类库方法中接受一个字符串参数,并.ToShortDateString()从silverlight和类库项目中传递值,但我想知道为什么这个方法不是可移植库的原生方法.这是文化问题吗?

.net c# silverlight datetime portable-class-library

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

聚合不变量是否可以包含基于其他地方信息的规则?

在DDD中,聚合不变量包括基于另一个聚合中的信息的规则吗?现在我不这么认为,但是这会给我带来麻烦,我不知道如何解决它.

我有一个名为Asset(设备)的实体,我将其建模为聚合的根.它有一个标签(属性)列表,用于描述制造商,模型等等.它存储名为AssetType的第二个聚合的标识,其中包含TagType列表,其中一些可以标记为必需.

现在在我看来,Asset的一个不变条件应该引用相关的AssetType,以在强制标记列表中强制执行非空值.但是,我的内心正在考虑如何强制执行一致性.

这是否意味着聚合应该真正包含所有四个实体?如果根目录是AssetType并且它下面有一个Assets列表,那么它可以解决我的问题,但是这不适合核心用例,其中包含维护不同类型资产列表的其他聚合.资产真的必须是根,否则我会遇到问题.

并且AssetType也不能很好地进入Asset聚合.这似乎是荒谬的.

我的胆量仍然说资产和资产类型是两个独立的聚合,但我如何解决一致性问题?或者我有不变的错误?

modeling domain-driven-design aggregate invariants

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

正确使用GetClipRgn?

我想编写一个函数,需要在DC上设置剪切区域,但在完成时恢复DC上的任何现有剪切区域.

所以我发现GetClipRgn哪些听起来就像我想要的那样,但似乎令人困惑.我找不到任何使用它的例子,Petzold没有提供任何东西.

我想出的是:

void DrawStuff( HDC hDC )
{
    HRGN restoreRegion = CreateRectRgn( 0, 0, 0, 0 );
    if (GetClipRgn( hDC, restoreRegion ) != 1)
    {
        DeleteObject( restoreRegion );
        restoreRegion = NULL;
    }

    // 
    // Set new region, do drawing
    //

    SelectClipRgn( hDC, restoreRegion );
    if (restoreRegion != NULL)
    {
        DeleteObject( restoreRegion );
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要创建一个区域才能获得当前区域,这似乎很奇怪.

这是正确的用法吗?

是否有更好的方法来达到同样的效果?

c++ winapi

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

何时使用域事件vs双重调度

我很困惑何时使用域事件以及何时使用双重调度.Udi鼓励我们使用域事件来维护模型的封装并远离贫血设计,但在我看来,域事件只能在操作执行或突然结束后使用,而不是在操作正在进行时.

例如:在解决某些业务逻辑时,我需要访问存储库,然后根据该值,我可以提升域事件.但问题是模型在解决业务逻辑时如何访问存储库,在我看来我们可以使用双重调度.

请告诉我,以上陈述是否有效?

domain-driven-design

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

Visual C++ x64附带进位

因为似乎没有ADC的固有内容而且我不能使用Visual C++的x64架构使用内联汇编程序,如果我想使用add with carry编写函数但是将它包含在C++命名空间中,我该怎么办?

(使用比较运算符进行仿真不是一种选择.这256兆位的添加对性能至关重要.)

c++ 64-bit inline-assembly intrinsics visual-c++

7
推荐指数
2
解决办法
2682
查看次数

如何修复"没有先调用EntityMemberChanging就调用了EntityMemberChanged"

这对我们来说一次又一次.阅读完这样的消息后,没有什么直观的做和调试.

entity-framework

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

什么是StretchBlt用于绘制HBITMAP的更高质量的替代品?

由于速度问题,我不想使用GDI +的DrawImage.还有哪些其他方法来绘制具有良好质量的图像大小 - 至少是线性或三次插值?

gdi image stretch

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