Tag: 处理

如何防止表单对象在关闭时处理?

我使用的是MDIParent表格。 当我关闭它的孩子时,孩子的对象处理。 有没有办法将子可见性设置为false而不是处置?

尝试/最后阻止vs调用dispose?

这两个代码示例之间是否有任何区别,如果没有,为什么using存在? StreamWriter writer; try { writer = new StreamWriter(…) writer.blahblah(); } finally { writer.Dispose(); } VS: using (Streamwriter writer = new Streamwriter(…)) { writer.blahblah } 我的意思是在第二个例子中你真的应该把它放在try块中,所以添加finally块确实不会花费太多精力。 我知道整个事情可能包含在一个更大的尝试块中但是,对我来说似乎是多余的。

在图像中定位文本

我目前正在开发一个项目,我的目标是在图像中找到文本。 OCR的文本不是我的意图。 我想基本上获取图像中文本的边界。 我正在使用AForge.Net成像组件进行操作。 在某种意义上的任何帮助? 2009年2月5日更新:我已经在我的项目中沿着另一条路线前进了。 但是我确实尝试使用MODI(Microsoft Office Document Imaging)获取文本。 它允许您轻松地OCR图像并从中提取文本。

我们如何降低myProcess.TotalProcessorTime的分辨率?

我正在使用TotalProcessorTime通过cpu中的方法来测量时间。 for(int i=0;i<10;i++){ double s = Process.getCurrentProcess().TotalProcessorTime; primeNumber(500); //return the 500 primenumber doube e = Process.getCurrentProcess().TotalProcessorTime; Console.writeLine(es); } 输出如下:0 15,0001 15,0001 0 32,0002 0 15,0001 0 15,0001 因此所有输出都是多达到15,6001,分辨率非常高。 那么我们如何才能将此分辨率降低到1,2,6,5,2等值? 为什么对于相同的代码,它给出了不同的值0 15,6001 32,0002?

如何在C#中的Dispose()方法中配置托管资源?

我知道Dispose()是针对非托管资源的,当不再需要资源时,应该在不等待垃圾收集器完成对象的情况下处理资源。 但是,在处理对象时,它会抑制垃圾收集器的完成(GC.SuppressFinalize(this);在下面的代码中)。 这意味着如果对象包含托管资源,我们也必须处理它,因为垃圾收集器不会清理它。 在下面的示例代码中(来自MSDN),“Component”是一个托管资源,我们为此资源调用dispose()(component.Dispose())。 我的问题是,我们如何为作为托管资源的Component类实现此方法? 我们应该使用像Collect()这样的东西来捅垃圾收集器来清理这部分吗? 任何想法将不胜感激。 谢谢。 以下是我正在查看的代码来自MSDN: using System; using System.ComponentModel; // The following example demonstrates how to create // a resource class that implements the IDisposable interface // and the IDisposable.Dispose method. public class DisposeExample { // A base class that implements IDisposable. // By implementing IDisposable, you are announcing that // […]

在C#中处理调用Dispose(IsDisposing)模式的目的?

这是来自MSDN的代码。 我不明白为什么这里的工作不只是在常规的Dispose()方法中完成。 使用Dispose(bool)方法的目的是什么? 谁会在这里打电话给Dispose(false)? public void Dispose() { Dispose(true); // Use SupressFinalize in case a subclass // of this type implements a finalizer. GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { // If you need thread safety, use a lock around these // operations, as well as in your methods that use the resource. if […]

我需要在处理后删除控件吗?

.NET 2 // dynamic textbox adding myTextBox = new TextBox(); this.Controls.Add(myTextBox); // … some code, finally // dynamic textbox removing myTextBox.Dispose(); // this.Controls.Remove(myTextBox); ?? is this needed 小解释 当然,如果我处理一个控件我将不再看到它,但无论如何,在父控件集合中仍将是“Nothing”? 我也需要像MSDN推荐的那样从控件中删除所有处理程序吗?

清理事件处理程序引用的最佳做法是什么?

我常常发现自己编写的代码如下: if (Session != null) { Session.KillAllProcesses(); Session.AllUnitsReady -= Session_AllUnitsReady; Session.AllUnitsResultsPublished -= Session_AllUnitsResultsPublished; Session.UnitFailed -= Session_UnitFailed; Session.SomeUnitsFailed -= Session_SomeUnitsFailed; Session.UnitCheckedIn -= Session_UnitCheckedIn; UnattachListeners(); } 目的是清理我们在目标(会话)上注册的所有事件订阅,以便GC可以自由处理会话。 我与同事讨论了实现IDisposable的类,但他相信这些类应该像这样执行清理: /// /// Disposes the object /// public void Dispose() { SubmitRequested = null; //frees all references to the SubmitRequested Event } 是否有理由选择其中一个? 有没有更好的方法来解决这个问题? (除了各处的弱参考事件) 我真正希望看到的是一些类似于引发事件的安全调用模式:即安全和可重复。 每次我附加到活动时我都记得要做的事情,这样我就可以确保清理起来很容易。

从另一个进程获取win32线程的StartAddress

背景: 我在Win32中编写了一个multithreading应用程序,我使用System.Diagnostics命名空间中的Process类从C#代码开始。 现在,在C#代码中,我想获取Win32应用程序中创建的每个线程的起始地址的名称/符号,以便我可以将与线程相关的信息(例如CPU使用情况)记录到数据库中。 基本上,C#代码启动Win32应用程序的多个实例,监视它们,如果需要则终止,然后将info / error / exceptions / reason / etc记录到数据库。 为此,我已经包装了两个Win32 API即。 SymInitialize和SymFromAddr在我自己编写的程序友好的API中,如下所示: extern “C” { //wraps SymInitialize DllExport bool initialize_handler(HANDLE hModue); //wraps SymFromAddr DllExport bool get_function_symbol(HANDLE hModule, //in void *address, //in char *name); //out } 然后使用pinvoke从C#代码调用这些API。 但它不起作用, GetLastError提供126 错误代码 ,这意味着: 指定的模块无法找到 我将Process.Handle作为hModule传递给两个函数; initialize_handler似乎工作,但get_function_symbol没有; 它给出了上述错误。 我不确定我是否通过了正确的手柄。 我尝试传递以下句柄: Process.MainWindowHandle Process.MainModule.BaseAddress 两者都在第一步失败(即调用initialize_handler )。 我将Process.Threads[i].StartAddress作为第二个参数传递,这似乎是失败的原因,因为ProcessThread.StartAddress似乎是RtlUserThreadStart函数的地址, 而不是特定于应用程序的启动函数的地址。 […]

试图理解C#中的exception

我在代码中并没有真正使用任何try / catches,但我试图打破这种习惯,现在开始使用exception。 我认为在我的应用程序中最重要的地方是阅读文件而我现在正在尝试实现它,但我不确定这样做的“最佳实践”。 目前我正在做这样的事情: private void Parse(XDocument xReader) { IEnumerable person = xReader.Descendants(“Person”).Elements(); foreach (XElement e in person) personDic[e.Name.ToString()] = e.Value; if (personDic[“Name”] == null || personDic[“Job”] == null || personDic[“HairColor”] == null) throw new KeyNotFoundException(“Person element not found.”); } 但我不确定这是否正确。 我有这个来处理它: try { personsReader.Read(filename, persons); } catch (KeyNotFoundException e) { MessageBox.Show(e.Message); return; } […]