(我知道标题听起来很容易,但坚持 - 这可能不是你认为的问题.)
在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#语言规范5.0时,我意识到您可以定义一个extern event.我习惯于平台调用和本机回调的外部方法.我在.NET世界的11年里没有遇到过这个概念.
extern事件与互操作?我搜索了'extern'的规范,发现属性,索引器,构造函数,静态构造函数,终结符(!)甚至运算符(!)都可以extern.字段不能.(我还了解到命名空间别名可以是'extern',但它意味着完全不同的东西.)
编辑:澄清事情.因此,extern不适用于事件概念或财产概念,而是适用于组成方法.那是对的吗?COM事件与事件有什么不同DllImport?
我想知道为什么.ToShortDateString.NET可移植类库中没有.我有两个使用相同代码的项目(Silverlight和常规.NET类库),代码涉及调用.ToShortDateString()一个DateTime对象.为了重用相同的代码而不是在两个地方复制它,我创建了一个可移植的类库,因此它可以由Silverlight和.NET类库导入.不幸的是,.ToShortDateString()使用类库时似乎不可用.我可以在可移植类库方法中接受一个字符串参数,并.ToShortDateString()从silverlight和类库项目中传递值,但我想知道为什么这个方法不是可移植库的原生方法.这是文化问题吗?
在DDD中,聚合不变量包括基于另一个聚合中的信息的规则吗?现在我不这么认为,但是这会给我带来麻烦,我不知道如何解决它.
我有一个名为Asset(设备)的实体,我将其建模为聚合的根.它有一个标签(属性)列表,用于描述制造商,模型等等.它存储名为AssetType的第二个聚合的标识,其中包含TagType列表,其中一些可以标记为必需.
现在在我看来,Asset的一个不变条件应该引用相关的AssetType,以在强制标记列表中强制执行非空值.但是,我的内心正在考虑如何强制执行一致性.
这是否意味着聚合应该真正包含所有四个实体?如果根目录是AssetType并且它下面有一个Assets列表,那么它可以解决我的问题,但是这不适合核心用例,其中包含维护不同类型资产列表的其他聚合.资产真的必须是根,否则我会遇到问题.
并且AssetType也不能很好地进入Asset聚合.这似乎是荒谬的.
我的胆量仍然说资产和资产类型是两个独立的聚合,但我如何解决一致性问题?或者我有不变的错误?
我想编写一个函数,需要在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)
我需要创建一个区域才能获得当前区域,这似乎很奇怪.
这是正确的用法吗?
是否有更好的方法来达到同样的效果?
我很困惑何时使用域事件以及何时使用双重调度.Udi鼓励我们使用域事件来维护模型的封装并远离贫血设计,但在我看来,域事件只能在操作执行或突然结束后使用,而不是在操作正在进行时.
例如:在解决某些业务逻辑时,我需要访问存储库,然后根据该值,我可以提升域事件.但问题是模型在解决业务逻辑时如何访问存储库,在我看来我们可以使用双重调度.
请告诉我,以上陈述是否有效?
因为似乎没有ADC的固有内容而且我不能使用Visual C++的x64架构使用内联汇编程序,如果我想使用add with carry编写函数但是将它包含在C++命名空间中,我该怎么办?
(使用比较运算符进行仿真不是一种选择.这256兆位的添加对性能至关重要.)
这对我们来说一次又一次.阅读完这样的消息后,没有什么直观的做和调试.
由于速度问题,我不想使用GDI +的DrawImage.还有哪些其他方法来绘制具有良好质量的图像大小 - 至少是线性或三次插值?
c# ×3
.net ×2
c++ ×2
64-bit ×1
aggregate ×1
datetime ×1
events ×1
gdi ×1
image ×1
intrinsics ×1
invariants ×1
modeling ×1
ncache ×1
silverlight ×1
stretch ×1
visual-c++ ×1
winapi ×1