我发现了很多关于CLS合规性的网页.
我了解CLS合规性:
许多人写道:"如果你编写代码,你应该把它写成符合CLS的." 但据我所知,没有理由在通用软件中使用CLS.
我是对的,还是我错过了什么?
我正在设计一个简单的扩展器控件.
我派生自UserControl,绘制内部控件,构建,运行; 一切都好.
由于内部控件是Panel,我想在设计时将其用作容器.的确,我使用了以下属性:
[Designer(typeof(ExpanderControlDesigner))]
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
Run Code Online (Sandbox Code Playgroud)
太棒了,我说.但它不是......
结果是我可以在设计时将它用作容器,但是:
我错过了什么?这是完整性的代码...为什么这段代码不起作用?
[Designer(typeof(ExpanderControlDesigner))]
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class ExpanderControl : UserControl
{
public ExpanderControl()
{
InitializeComponent();
....
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
internal class ExpanderControlDesigner : ControlDesigner
{
private ExpanderControl MyControl;
public override void Initialize(IComponent component)
{
base.Initialize(component);
MyControl = (ExpanderControl)component;
// Hook up events
ISelectionService s = (ISelectionService)GetService(typeof(ISelectionService));
IComponentChangeService c = (IComponentChangeService)GetService(typeof(IComponentChangeService));
s.SelectionChanged += new EventHandler(OnSelectionChanged);
c.ComponentRemoving += new ComponentEventHandler(OnComponentRemoving);
}
private void OnSelectionChanged(object sender, System.EventArgs e) …Run Code Online (Sandbox Code Playgroud) 我创建了一个继承自System.Windows.Forms.UserControl的WinForms控件...我在控件上有一些自定义事件,我希望我的控件的使用者能够看到.在设计时,我无法让我的事件显示在"属性"窗口的"事件"选项卡中.这意味着分配事件的唯一方法是以编程方式编写
myUserControl.MyCustomEvent += new MyUserControl.MyCustomEventHandler(EventHandlerFunction);
Run Code Online (Sandbox Code Playgroud)
这对我来说很好,我猜,但当其他人来使用我的UserControl他们不会知道这些事件存在(除非他们读图书馆doco ...是的正确).我知道事件将显示使用Intellisense,但如果它也可以在属性窗口中显示它会很棒.
对于渲染,我有一个与窗口关联的当前GL上下文.在应用程序呈现多个场景(例如使用累积或不同视口)的情况下,我认为可以重用相同的上下文.
我的问题是,我为什么要使用多个GL上下文?我在ARB_framebuffer_object扩展规范中读到调用MakeCurrent的代价很高,如果存在ARB_framebuffer_object扩展,我可以在不使用MakeCurrent的情况下在通用缓冲区上呈现.
显然,使用多个GL上下文的唯一原因是避免设置上下文状态(像素存储,传输,点大小,多边形点画......)或者具有可用的多个渲染缓冲区配置(一个上下文有累积,另一个没有).我应该如何决定何时使用替代上下文而不是设置上下文状态?
我需要处理多个面板,包含各种数据掩码.使用TreeView控件可以看到每个面板.
此时,我手动处理面板可见性,方法是将所选面板可见并将其置于顶部.
实际上这并不是很容易,特别是在UI设计师中,因为当我添加一个全新的面板时,我必须调整每个面板的大小,然后设计它......
一个好的解决方案是使用TabControl,每个面板都包含在TabPage中.但是我找不到任何隐藏TabControl按钮的方法,因为我已经有了一个用于选择项目的TreeView.
另一种解决方案是ipotethic"StackPanelControl",其中Panel使用堆栈排列,但我无法在任何地方找到它.
处理这种UI的最佳解决方案是什么?
色彩空间.好吧,每个人都知道RGB:在[0.0,1.0]范围内归一化的三个值,它们具有红绿蓝色的强度的含义; 这个强度是线性的,不是吗?
伽玛.据我所知,gamma是一种将RGB颜色分量映射到另一个值的函数.谷歌搜索,我已经看到线性函数和非线性函数...线性函数似乎缩放RGB分量,所以它似乎调整图像亮度; 非线性函数似乎"解压缩"更暗/更亮的组件.
现在,我开始实现一个图像查看器,它将显示不同的图像格式作为纹理.我想修改这些图像的伽玛,所以我应该建立一个片段着色器并在纹理四边形上运行.很好,但我如何确定正确的伽马校正?
OpenGL使用线性RGB颜色空间,使用浮点组件.实际上,我可以从这些值(具有特殊浮点精度)开始计算伽马校正值,因此在钳制伽马校正值后显示它们.
首先,我将确定伽玛斜坡.我怎么能确定它?(分析或使用查找表)
然后,我开始调查OpenGL扩展EXT_framebuffer_sRGB,这似乎与扩展EXT_texture_sRGB非常相关.
EXT_texture_sRGB引入了一种新的纹理格式,用于将textel值线性化为RGB线性空间.(脚注1)通过这种方式,我知道sRGB色彩空间并将其用作线性RGB色彩空间.
相反,EXT_framebuffer_sRGB扩展允许我将线性RGB值编码到sRGB帧缓冲区,而不用担心它.
...
等等,所有这些信息是为了什么?如果我可以使用sRGB framebuffer并加载sRGB纹理,处理纹理而不进行sRGB转换...为什么我应该更正伽玛?
即使在sRGB缓冲区上,也许我可以校正所有相同的伽玛?或者我最好不要?亮度和对比度:它们应在伽玛校正之前还是之后应用?
这是很多信息,我现在感到困惑.希望你们中的某个人能够向我解释所有这些概念!谢谢.
...
还有一个问题.在设备伽玛与"标准"2.2不同的情况下,如何"累积"不同的伽马校正?我不知道是否清楚:如果图像的RGB值已经针对伽马值为2.2的显示器进行了校正,但显示器的伽马值为2.8,如何校正伽马?
(1)这里有一些摘要突出我的意思:
sRGB色彩空间基于光线昏暗的办公室中预期的典型(非线性)监视器特性.它已由国际电工委员会(IEC)标准化为IEC 61966-2-1.sRGB色彩空间大致对应于2.2伽马校正.
此扩展是否提供任何类型的sRGB帧缓冲格式或保证使用sRGB纹理渲染的图像在输出到支持sRGB色彩空间的设备时"看起来不错"?
Run Code Online (Sandbox Code Playgroud)RESOLVED: No. Whether the displayed framebuffer is displayed to a monitor that faithfully reproduces the sRGB color space is beyond the scope of this extension. This involves the gamma correction and color calibration of the physical display device. With this extension, artists can author content in an sRGB color space and provide that sRGB content …
每个人都使用很多List.我需要迭代这个列表,所以我使用已知的SyncRoot模式.
最近我在这篇文章中注意到应该避免使用SyncRoot以支持"嵌入式"线程安全(每个方法将锁定私有对象而不使用SyncRoot属性暴露它).我能理解,部分我同意这一点.
问题是List <T>类没有实现SyncRoot属性,即使实现了ICollection接口,它暴露了SyncRoot属性.我说这会使代码失效
List<int> list = new List<int>()
list.SyncRoot;
Run Code Online (Sandbox Code Playgroud)
给我以下编译器错误:
错误CS0117:'System.Collections.Generic.List'不包含'SyncRoot'的定义
...如果这是真的,我怎么能在迭代它时同步List <T>类型的公共属性?
阅读GLSL 1.40规范:
片段输出只能是浮点,浮点矢量,有符号或无符号整数或整数向量,或任何这些的数组.无法输出矩阵和结构.片段输出在以下示例中声明:
out vec4 FragmentColor; out uint Luminosity;
片段颜色定义为写gl_FragColor ...是不是?有人可以清楚我对这些产出的看法吗?我可以只编写示例中的'FragmentColor'来确定片段颜色吗?我可以回读一下(比如'Luminosity')吗?
是否可以使用Visual Studio配置环境进行条件安装配置?
例如,选择DEBUG或RELEASE配置,Wix会在构建的安装中选择不同的可执行文件.
基本上我将从相同的项目中构建不同的安装,但它们因组件而异.某些组件是从同一个项目构建的,但是使用不同的预处理器选项构建.
当然可以包含每个必需的组件,然后定义功能以便为安装选择特定组件,但我不想真正重新分发某些可执行文件.
构建不同的Wix项目是唯一的解决方案吗?
我正在寻找一种存储过程存储器的方法,并在以后的某些条件下恢复它.
...
其实我已经读过有关它的问题......这似乎是一个很大的挑战!
因此,让我们分析一下:应用程序是分布式应用程序,但许多进程都是无状态的(请求将其状态发送到集中式服务器).进程使用网络连接和共享内存与其他进程通信.
中央服务器应通过转储其进程内存来保存其状态,该进程内存应在稍后的某些条件下恢复.(1)
我知道ReadProcessMemory和WriteProcessMemory函数,它们允许进程读取自身并覆盖已经分配的内存,不是吗?所以,我需要的是我开始读/写的地址,以及读/写的字节数.那么...... 什么地址?我读过的很多代码都使用VirtualAlloc返回的地址,但我不知道这对我是否有用.
我假设进程可执行段没有改变,所以它们不需要红色/写入.在恢复时,我还可以假设当主线程读取内存时,所有进程线程都处于相同的执行位置.
它仍然是堆栈内存和堆内存,它们是我感兴趣的内存段.
可能吗?
(1)问我为什么要这样做是完全合法的.原因是...像往常一样复杂.但是,假设应用程序具有非常复杂的状态,则需要过于复杂的状态保存算法.另一个替代方案(在分析主题中)是记录器/重放机制的实现,其能够再现已经对修改状态做出贡献的每个事件.
我想起了malloc&co.钩.所以我可以跟踪进程分配的内存.但实际上我注意到了_CrtMemState结构,但我不知道它是否对我有用.
c# ×5
opengl ×3
winforms ×3
c++ ×1
collections ×1
deployment ×1
gamma ×1
glsl ×1
installer ×1
memory ×1
patch ×1
process ×1
rgb ×1
shader ×1
srgb ×1
stackpanel ×1
tabcontrol ×1
wix ×1