小编Sea*_*gan的帖子

C# - 如何找到ArgumentException发生的原因?

System.Drawing.dll中发生了未处理的"System.ArgumentException"类型异常

附加信息:参数无效.

这发生在此代码的末尾.

public void WriteStatusMessage(string message)
{
    m_ToolStripStatusLabelUserMessage.BackColor = WriteDefaultBackColor;
    m_ToolStripStatusLabelUserMessage.ForeColor = WriteDefaultForeColor;
    m_ToolStripStatusLabelUserMessage.Text = CommonConstants.Space + message;
    Update();
}
Run Code Online (Sandbox Code Playgroud)

如果我在代码中添加一个断点,它会得到该错误,但会在以后的更新中发生.据我所知,我们所做的唯一图形代码涉及绘制图形(这与我通过尝试打开历史监视变量值的文件然后显示为图形而得到此错误的方式一致),并且仅使用画笔,钢笔和字体(我最近的一些变化是通过并添加"使用"以确保它们被处理掉,因为我们得到了内存泄漏).

主要是,我希望有人可以指出我正确的方向开始解码这个.令我沮丧的是,这是其中一个案例,其中进行了大量的更改和检查,我可以发誓我在签入之前检查过,特别是因为这个动作与我正在解决的问题有关,但是很难与事实争论,事实是它现在失败了.

感谢您提供任何帮助.

编辑:我已经设法在我的一个签到中恢复到早期版本,所以我对于在哪里寻找问题有一个大概的想法.它确实是图形库之一,特别是在http://www.codeproject.com/KB/miscctrl/GraphComponents.aspx上绘制图形库的图形库.根据下面的建议,我将首先查看我修改过的Paint程序.

进一步编辑:我找到了.OnPaint,与预测的一样:

protected override void OnPaint(PaintEventArgs e)
{
    if (!Visible)
        return;

    Graphics graphics = e.Graphics;
    Draw(graphics);

    base.OnPaint(e);
}
Run Code Online (Sandbox Code Playgroud)

变成了

protected override void OnPaint(PaintEventArgs e)
{
    if (!Visible)
        return;

    using (Graphics graphics = e.Graphics)
    {
        Draw(graphics);
    }       
    base.OnPaint(e);
}
Run Code Online (Sandbox Code Playgroud)

当我积极地删除没有Dispose的Drawing对象的引用时.恢复该功能可以消除崩溃.不幸的是,当我做出这些改变时,看起来我回过头来追踪我正在寻找的内存泄漏......

c# system.drawing argumentexception

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

如何更有效地乘以转置矩阵?

我一直在为此而奋斗.我有一个基于SSE的算法,用于矩阵乘以A矩阵B.我还需要实现A,B或两者都被转置的操作.我做了一个天真的实现,下面表示的4x4矩阵代码(我认为这是非常标准的SSE操作),但A*B^T操作大约需要两倍A*B.ATLAS实现返回与A*B转置相乘的类似值和几乎相同的结果,这表明有一种有效的方法可以做到这一点.

MM-乘法:

m1 = (mat1.m_>>2)<<2;
n2 = (mat2.n_>>2)<<2;
n  = (mat1.n_>>2)<<2;

for (k=0; k<n; k+=4) {
  for (i=0; i<m1; i+=4) {
    // fetch: get 4x4 matrix from mat1
    // row-major storage, so get 4 rows
    Float* a0 = mat1.el_[i]+k;
    Float* a1 = mat1.el_[i+1]+k;
    Float* a2 = mat1.el_[i+2]+k;
    Float* a3 = mat1.el_[i+3]+k;

    for (j=0; j<n2; j+=4) {
      // fetch: get 4x4 matrix from mat2
      // row-major storage, so get 4 rows …
Run Code Online (Sandbox Code Playgroud)

c++ transpose sse matrix-multiplication

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

对于一个必须只包含唯一项目但在99%的时间内包含0或1项的列表,开销是否比HashSet更好?

我目前正在开展一个项目,我们有一系列活动.我们对事件进行的一项分析是查看特定类型的事件并检查它是否可能是由不久之前发生的另一事件(或在一个奇怪的情况下稍后发生)引起的.这些事件中的每一个只能通过单个事件来实现,但是一个事件可能是多个事件的因果事件.我们希望这种关联可以双向进行,这样,从任何特定的方法,您都可以直接进入导致它的事件,或者它引起的事件之一.基于此,我首先将以下属性添加到Event对象并添加功能:

protected Event causalEvent;
protected List<Event> effectedEvents;
Run Code Online (Sandbox Code Playgroud)

经过一番思考后,我认为我们从不希望将相同的项目添加到effectedEvents列表中两次.在阅读了防止重复列表<T>条目的答案后,我选择了Hashset.

protected Event causalEvent;
protected HashSet<Event> effectedEvents;
Run Code Online (Sandbox Code Playgroud)

一位同事和我讨论了我添加的代码,他指出使用一个HashSet可能会让人感到困惑,因为他倾向于看到HashSet并假设有大量的数据.在我们的例子中,由于算法中使用的规则,effectedEvents在大约90%的情况下将有0个项目,在9%中将有1个项目,在1%的时间内将有2个项目.我们几乎永远不会有超过2项,尽管有可能.我相信两个集合的查询成本是相同的.使用的内存量非常相似,因为两者都开始假设一个小容量(虽然,我会承认,这List使您能够在构造函数中设置该容量,同时HashSet只允许根据其内容减少值,"四舍五入到特定于实现的值").

因此,长期的问题是,HashSet对于那些不熟悉使用它以确保唯一性的人,使用除了可能的混淆之外是否有任何真正的惩罚?

c# performance list hashset

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

如何在Telerik MVC网格中确定网格行是否为新编辑

我有一个包含布尔值CreateIncident的Telerik MVC网格.对于新行,我想将该值设置为true.对于编辑,如果值已经为true,我想禁用该复选框.Kendo UI显然添加了一种方法来确定该行是否是新的,但是在MVC版本中无法访问相同的调用.我可以拦截C#中的Insert和Update事件,但是在他们点击Save按钮之后.我可以拦截Javascript中的编辑事件,这是上面的Kendo答案进行调用的地方.

或者,如果有更好的方法来解决这个问题,我愿意接受建议.

telerik telerik-mvc telerik-grid

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

在 TypeScript 中加载文件

我是 TypeScript 和 Angular 的新手,我想从本地磁盘加载图像,将此图像存储在变量中并将此数据传递给另一个组件。

有人举了一些例子。我尝试在 Javascript 中使用一个示例,但它在 TypeScrupt 中不起作用。在 HTML 文件中使用这个:

 <input type="file" name="img" multiple>
Run Code Online (Sandbox Code Playgroud)

我尝试使用 image 属性,但得到一个未定义的错误。我应该将数组字节传递给另一个组件还是该文件图像的路径?

html javascript typescript angular

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

ASP.NET MVC Telerik Grid:如何在编辑时使一列只读?

我有一个ASP.NET MVC Telerik Grid(不是Kendo).我有一个有两列的网格.第一列是我可以选择的项目的下拉列表,第二列只是一个可编辑的文本框.

我想在编辑时将第一列设置为READ ONLY,这意味着我只能编辑第二列而不能编辑第一列.我将第一列设置为只读取模型(模型类中的[ReadOnly]标签)和视图(即可编辑(假)).

当我这样做时,我不允许像我想要的那样在编辑模式下编辑第一列.但是,当我去插入/创建一个新记录时......第一列是空白的,我只能输入第二列的值.

我已经尝试了一切并环顾四周,但找不到解决方案.

asp.net-mvc user-interface telerik telerik-mvc telerik-grid

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