每当用户报告错误时,例如
System.Runtime.InteropServices.SEHException - 外部组件引发了异常?
我作为程序员可以做些什么来确定原因?
场景:一个用户(使用我公司编写的程序)报告了此错误.这可能是也可能不是一次性错误.他们提到,在上个月,计算机已经两次"停止工作".我从经验中学到了,不是太过于字面意思,因为它通常意味着与计算机有关的人没有按预期工作.他们无法给我更多细节,我找不到任何记录错误.因此它可能是也可能不是这个错误.
从堆栈跟踪中,实际错误是在构造一个不直接调用任何互操作代码的类时,但可能因为该对象可能是与DevExpress Grid数据绑定的列表的一部分而复杂化.
错误被未处理的异常例程"捕获",该例程通常会关闭程序,但可以选择忽略并继续.如果他们选择忽略错误,则程序继续工作,但下次运行此例程时会再次出现错误.但是,在关闭并重新启动应用程序后,它不会再次出现.
有问题的电脑似乎没有压力.它正在运行Vista Business,拥有2GB的内存,根据任务管理器,我们的应用程序只使用了大约一半,只有大约200Mb.
还有一条信息可能相关或不相关.同一程序的另一部分使用第三方组件,它实际上是一个围绕本机dll的dotnet包装器,这个组件确实有一个已知的问题,偶尔,你得到一个
尝试读取或写入受保护的内存.这通常表明其他内存已损坏
组件制造商表示,这已在我们内部使用的最新版本的组件中修复,但尚未向客户提供.
鉴于错误的后果很少(没有工作丢失并重新启动程序并返回到最多只需要一分钟的时间)并且考虑到客户将很快获得新版本(更新后的第三个 - 派对组件),我显然可以交叉手指,希望错误不再发生.
但还有什么我可以做的吗?
我是C#的新手,我试着查看之前的帖子,但没有找到一个好的答案.
在单个表单的C#Windows窗体应用程序中,使用Form.Close()更好还是Form.Dispose()?
MSDN表示关闭对象中的所有资源,并在调用Close时处理该表单.尽管如此,我在网上遇到了几个跟随Dispose而不是Close的例子.
一个人比另一个人有优势吗?在哪种情况下,我们应该优先选择其中一种?
问题:
我有一个大约120,000个用户(字符串)的文本文件,我想将其存储在一个集合中,然后再对该集合执行搜索.
每次用户更改a的文本时都会发生搜索方法TextBox,结果应该是包含文本的字符串TextBox.
我不必更改列表,只需将结果拉出来并将其放入ListBox.
到目前为止我尝试过的:
我尝试了两个不同的集合/容器,我正在从外部文本文件中转储字符串条目(当然是一次):
List<string> allUsers;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秒).
题:
你认为我的瓶颈在哪里?我用过的系列?搜索方法?都?
如何获得更好的性能和更流畅的功能?
我已经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) 如何将我的应用程序窗口置于前面?例如,我的应用程序需要注意.
这是我的个人计划.我需要这个功能.
这就是我得到的.但它没有 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.
我工作得很好,但并不总是.
我有一个winforms应用程序,并希望在DataGridView选中/取消选中控件中嵌入的复选框时触发一些代码.我尝试过的每一件事
CheckBox单击时但在其检查状态发生变化之前触发,或者CheckBox失去焦点时触发我似乎无法找到在检查状态更改后立即触发的事件.
编辑:
我想实现的是,当检查的状态CheckBox的一个DataGridView变化,在其他两个数据DataGridView变迁.然而,我使用的所有事件中,其他网格中的数据仅CheckBox在第一次DataGridView失去焦点后才会发生变化.
我的3列DataGridView.我想要做的是让前2列自动适应内容的宽度,并让第3列填充剩余的空间.
在WinForms中可以做到吗?我正在从EF DataContext加载我的数据,如果它有用的话.我已经包含了目前看起来如何的图像.

我在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窗体应用程序使用以下引用构建:
有什么问题?如何解决这个问题呢?如何调试以获取更多有用信息?
看来,Label没有Hint或ToolTip或Hovertext财产.那么当Label鼠标逼近时,显示提示,工具提示或悬停文本的首选方法是什么?
c# ×10
winforms ×10
.net ×4
datagridview ×2
.net-2.0 ×1
collections ×1
label ×1
linq ×1
tooltip ×1