标签: winforms

你应该如何诊断错误SEHException - 外部组件引发了异常

每当用户报告错误时,例如

System.Runtime.InteropServices.SEHException - 外部组件引发了异常?

我作为程序员可以做些什么来确定原因?

场景:一个用户(使用我公司编写的程序)报告了此错误.这可能是也可能不是一次性错误.他们提到,在上个月,计算机已经两次"停止工作".我从经验中学到了,不是太过于字面意思,因为它通常意味着与计算机有关的人没有按预期工作.他们无法给我更多细节,我找不到任何记录错误.因此它可能是也可能不是这个错误.

从堆栈跟踪中,实际错误是在构造一个不直接调用任何互操作代码的类时,但可能因为该对象可能是与DevExpress Grid数据绑定的列表的一部分而复杂化.

错误被未处理的异常例程"捕获",该例程通常会关闭程序,但可以选择忽略并继续.如果他们选择忽略错误,则程序继续工作,但下次运行此例程时会再次出现错误.但是,在关闭并重新启动应用程序后,它不会再次出现.

有问题的电脑似乎没有压力.它正在运行Vista Business,拥有2GB的内存,根据任务管理器,我们的应用程序只使用了大约一半,只有大约200Mb.

还有一条信息可能相关或不相关.同一程序的另一部分使用第三方组件,它实际上是一个围绕本机dll的dotnet包装器,这个组件确实有一个已知的问题,偶尔,你得到一个

尝试读取或写入受保护的内存.这通常表明其他内存已损坏

组件制造商表示,这已在我们内部使用的最新版本的组件中修复,但尚未向客户提供.

鉴于错误的后果很少(没有工作丢失并重新启动程序并返回到最多只需要一分钟的时间)并且考虑到客户将很快获得新版本(更新后的第三个 - 派对组件),我显然可以交叉手指,希望错误不再发生.

但还有什么我可以做的吗?

c# error-logging .net-2.0 winforms

79
推荐指数
3
解决办法
15万
查看次数

C#Form.Close vs Form.Dispose

我是C#的新手,我试着查看之前的帖子,但没有找到一个好的答案.

在单个表单的C#Windows窗体应用程序中,使用Form.Close()更好还是Form.Dispose()

MSDN表示关闭对象中的所有资源,并在调用Close时处理该表单.尽管如此,我在网上遇到了几个跟随Dispose而不是Close的例子.

一个人比另一个人有优势吗?在哪种情况下,我们应该优先选择其中一种?

c# winforms

79
推荐指数
3
解决办法
10万
查看次数

搜索字符串集合的最快方法

问题:

我有一个大约120,000个用户(字符串)的文本文件,我想将其存储在一个集合中,然后再对该集合执行搜索.

每次用户更改a的文本时都会发生搜索方法TextBox,结果应该是包含文本的字符串TextBox.

我不必更改列表,只需将结果拉出来并将其放入ListBox.

到目前为止我尝试过的:

我尝试了两个不同的集合/容器,我正在从外部文本文件中转储字符串条目(当然是一次):

  1. List<string> allUsers;
  2. HashSet<string> allUsers;

使用以下LINQ查询:

allUsers.Where(item => item.Contains(textBox_search.Text)).ToList();

我的搜索事件(用户更改搜索文本时触发):

private void textBox_search_TextChanged(object sender, EventArgs e)
{
    if (textBox_search.Text.Length > 2)
    {
        listBox_choices.DataSource = allUsers.Where(item => item.Contains(textBox_search.Text)).ToList();
    }
    else
    {
        listBox_choices.DataSource = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

两者都给了我一个很差的响应时间(每次按键之间大约1-3秒).

题:

你认为我的瓶颈在哪里?我用过的系列?搜索方法?都?

如何获得更好的性能和更流畅的功能?

c# linq collections string-search winforms

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

如何检测窗体何时被最小化?

我知道我可以通过WindowState获取当前状态,但我想知道当用户尝试最小化表单时是否会发生任何事件.

c# winforms

77
推荐指数
4
解决办法
9万
查看次数

Console.WriteLine不会显示在"输出"窗口中

我已经Console.WriteLine拨打了一些电话进行测试,但它们没有出现在输出框中?

public static ArrayList myDeliveries = new ArrayList();

public mainForm(){
    InitializeComponent();
}

private void mainForm_Load(object sender, EventArgs e){

    if (!File.Exists("../../MealDeliveries.txt")){
        MessageBox.Show("File not found!");
        return;
    }

    using (StreamReader sr = new StreamReader("../../MealDeliveries.txt")){
        //first line is delivery name 
        string strDeliveryName = sr.ReadLine();
        Console.WriteLine("Test content");

        while (strDeliveryName != null){

            //other lines 
            Delivery d = new Delivery(
                strDeliveryName, 
                sr.ReadLine(),
                sr.ReadLine(), 
                sr.ReadLine(),
                sr.ReadLine(), 
                sr.ReadLine(),
                sr.ReadLine()
            );

            mainForm.myDeliveries.Add(d);

            //check for further values
            strDeliveryName = sr.ReadLine();
        }
    }

    displayDeliveries();


}


private void displayDeliveries(){

    lstDeliveryDetails.Items.Clear();
    Console.WriteLine("Test …
Run Code Online (Sandbox Code Playgroud)

.net c# winforms

77
推荐指数
5
解决办法
14万
查看次数

如何将我的应用程序窗口置于前面?

如何将我的应用程序窗口置于前面?例如,我的应用程序需要注意.

这是我的个人计划.我需要这个功能.

这就是我得到的.但它没有 100%的工作时间.

public void BringToFrontToEnterCaptha()
{
    if (InvokeRequired)
    {
        Invoke(new Action(BringToFrontToEnterCaptha));
    }
    else
    {
        this.TopMost = true;
        this.Focus();
        this.BringToFront();
        this.textBox1.Focus();
        this.textBox1.Text = string.Empty;
        System.Media.SystemSounds.Beep.Play();
    }
}

public void BringToBackAfterEnterCaptha()
{
    if (InvokeRequired)
    {
        Invoke(new Action(BringToBackAfterEnterCaptha));
    }
    else
    {
        this.TopMost = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我从背景工作者那里打电话给他们.

BringToFrontToEnterCaptha();
while (!ready)
{
    Thread.Sleep(100);
}
BringToBackAfterEnterCaptha();
Thread.Sleep(300);
Run Code Online (Sandbox Code Playgroud)

按"接受"按钮后,bool ready设置为true.

我工作得很好,但并不总是.

.net c# winforms

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

如何检测DataGridView CheckBox事件的变化?

我有一个winforms应用程序,并希望在DataGridView选中/取消选中控件中嵌入的复选框时触发一些代码.我尝试过的每一件事

  1. CheckBox单击时但在其检查状态发生变化之前触发,或者
  2. 只有在CheckBox失去焦点时触发

我似乎无法找到在检查状态更改后立即触发的事件.


编辑:

我想实现的是,当检查的状态CheckBox的一个DataGridView变化,在其他两个数据DataGridView变迁.然而,我使用的所有事件中,其他网格中的数据仅CheckBox在第一次DataGridView失去焦点后才会发生变化.

c# datagridview winforms

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

DataGridView AutoFit和Fill

我的3列DataGridView.我想要做的是让前2列自动适应内容的宽度,并让第3列填充剩余的空间.

在WinForms中可以做到吗?我正在从EF DataContext加载我的数据,如果它有用的话.我已经包含了目前看起来如何的图像.

在此输入图像描述

c# datagridview winforms

77
推荐指数
4
解决办法
18万
查看次数

如何使用异常代码修复.NET启动时崩溃的.NET应用程序:0xE0434352?

我在Visual Studio 2010中构建了一个.NET Windows Forms应用程序.我还通过Visual Studio 2010构建了一个相应的安装/安装包.它构建为一个32位(x86)应用程序.(我们使用仅限32位的第三方Windows窗体控件).

我能够运行安装程序包并成功部署到其他Windows 7 64位环境和32位Windows XP盒.安装的应用程序运行正常.

但是,当我尝试运行Windows Server 2008 R2 - 64位时,应用程序在启动时崩溃.它通过安装程序成功安装,没有任何错误.

加载应用程序时似乎崩溃.我将一个消息框作为应用程序中的第一行,以查看它是否超过了加载.消息框未显示,因此我假设它在应用程序的加载/初始化期间发生.

到目前为止,我还没有找到太多进展.从细节我看到以下内容:

Exception Code: E0434352
Run Code Online (Sandbox Code Playgroud)

我已经四处搜寻/谷歌搜索是否有任何明显的东西,但我没有看到任何东西.我在CLR中看到了一些可能的堆栈溢出的引用.

Windows窗体应用程序使用以下引用构建:

  • DevExpress的
  • Infragistics Winforms控件
  • ORACLE DataAccess DLL
  • 的RabbitMQ

有什么问题?如何解决这个问题呢?如何调试以获取更多有用信息?

.net c# visual-studio-2010 winforms

76
推荐指数
3
解决办法
22万
查看次数

如何在C#Winforms中为标签添加提示或工具提示?

看来,Label没有HintToolTipHovertext财产.那么当Label鼠标逼近时,显示提示,工具提示或悬停文本的首选方法是什么?

.net c# label tooltip winforms

76
推荐指数
5
解决办法
9万
查看次数