Tag: 处理

如果autoreset设置为false,我的计时器会自动处理吗?

我在我的应用程序中只启动一次计时器: CustomTimer timer = new CustomTimer(mod); timer.Interval = interval.TotalMilliseconds; timer.AutoReset = false; timer.Start(); 因此AutoReset设置为false。 在计时器结束时,是否会自动调用dispose方法?

64位应用程序启动32位进程

我正在研究用.Net 4.0,C#编码的64位应用程序。 在这个应用程序中,在某些时候,我需要使用以下代码启动另一个exe文件: l_process.StartInfo.FileName = _sFullFilePath; l_process.StartInfo.Verb = “Open”; l_process.StartInfo.CreateNoWindow = true; l_process.StartInfo.Arguments = l_sParams; l_process.Start(); 现在,这个外部应用程序在32位环境(x86)下编译,我收到以下错误: **The specified executable is not valid for this OS platform** 甚至可以这样做吗? 如果是的话,我如何设法从我的应用程序启动这个应用程序没有麻烦?

实现通用自定义exception的优点和缺点

实现自定义exception的优缺点如下: 创建一个枚举,在其描述中表示错误消息: public class Enums { public enum Errors { [Description(“This is a test exception”)] TestError, … } } 创建自定义exception类: public class CustomException : ApplicationException { protected Enums.Errors _customError; public CustomException(Enums.Errors customError) { this._customError = customError; } public override string Message { get { return this._customError!= Enums.Errors.Base ? this.customError.GetDescription() : base.Message; } } } GetDescription方法是一个枚举扩展方法,它使用reflection获取枚举描述。 […]

exception会在try / catch上下文中丢失部分堆栈跟踪

我有两个例子。 在第一种情况下,调试器捕获未处理的exception: static void Main(string[] args) { Exec(); } static void Exec() { throw new Exception(); } 并且exception具有完整的堆栈跟踪: at ConsoleApplication28.Program.Exec() at ConsoleApplication28.Program.Main(String[] args) at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object […]

区分相同类型的exception

区分同一类型的两个exception但出于不同原因抛出的最佳方法是什么。 例如,可以抛出InvalidOperationException尝试访问空序列,但是在使用Concurrent对象时也可以抛出它(例如BlockingCollection ) 从我的阅读中我得出结论,使用BlockingCollection.CompleteAdding()来表示完成是完全正常的,因此需要捕获exception并正确处理(例如退出任务) 在不使用消息内容的情况下过滤这些内容的最佳方法是什么? 编辑 :它们似乎都具有相同的HResult值。

为什么在使用控制台应用程序测试时,在dll中启动进程,而在另一个dll调用时却没有?

上周我发布了这个问题: 如何在C#dll中将其作为一个进程运行时获取控制台应用程序输出,因为我试图找出问题的原因。 但是,我一直无法找到我收到错误的原因所以我想我会要求跟进直接解决我遇到的问题。 我正在研究DLL中的方法,我必须在其中启动一个进程。 用于执行此操作的代码是: ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = false; psi.ErrorDialog = false; psi.RedirectStandardError = true; psi.RedirectStandardOutput = true; psi.RedirectStandardInput = true; psi.CreateNoWindow = true; psi.FileName = @”C:\Program Files\OpenMS-1.6\XTandemAdapter.exe”; psi.Arguments = @”-ini C:\XTandemAdapter.ini”; Process getIDs = new Process(); getIDs.StartInfo = psi; getIDs.Start(); StreamWriter inputWriter = getIDs.StandardInput; StreamReader outputReader = getIDs.StandardOutput; StreamReader errorReader […]

抛出exception后继续循环迭代

假设我有一个这样的代码: try { for (int i = 0; i < 10; i++) { if (i == 2 || i == 4) { throw new Exception("Test " + i); } } } catch (Exception ex) { errorLog.AppendLine(ex.Message); } 现在,显然执行将在i==2上停止,但我想让它完成整个迭代,以便在errorLog有两个条目(对于i==2和i==4 )所以,是否可能继续迭代甚至抛出exception?

返回由Image.FromStream(Stream stream)方法创建的图像

我有这个函数在函数中返回一个Image,使用Image.FromStream方法创建图像根据MSDN : 您必须在图像的生命周期内保持流打开 所以我没有关闭流(如果我关闭了蒸汽,则从返回的图像对象中抛出GDI +exception)。 我的问题是当在返回的Image上的其他地方调用Image.Dispose()时是否关闭/处理流 public static Image GetImage(byte[] buffer, int offset, int count) { var memoryStream = new MemoryStream(buffer, offset, count); return Image.FromStream(memoryStream); } 正如其中一个答案中所建议的那样, 使用不是可行的方法,因为它会引发exception: public static Image GetImage(byte[] buffer, int offset, int count) { using(var memoryStream = new MemoryStream(buffer, offset, count)) { return Image.FromStream(memoryStream); } } public static void Main() { […]

如何捕捉exception?

我试图调用api并检查它的响应,但是当传递了一些错误的值时它会停止程序。 我想在请求和响应期间添加exception,但不确定如何写入函数。 这就是我调用我的REST调用的方式 public dynamic APICalls(JObject ljson, string endpoints, string method) { var httpReq = (HttpWebRequest)HttprequestObject(endpoints, method); using (var streamWriter = new StreamWriter(httpReq.GetRequestStream())) { streamWriter.Write(ljson); streamWriter.Flush(); streamWriter.Close(); } var httpResponse = (HttpWebResponse)httpReq.GetResponse(); var result = “”; using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { result = streamReader.ReadToEnd(); } return result; //return “Success”; //not sure what to […]

使用Backgroundworker的正确方法

我正在使用backgroundworker来显示加载屏幕。 DO事件如下: private void bwLoadingScreen_DoWork(object sender, DoWorkEventArgs e) { _ls = new LoadingScreen(); _ls.Show(); while (!bwLoadingScreen.CancellationPending) { Application.DoEvents(); } } 我使用以下代码来处理Loadingscreen: if (_ls.InvokeRequired && !_ls.IsDisposed) { Invoke(new MethodInvoker(delegate { _ls.Close(); _ls.Dispose(); })); } else if (!_ls.IsDisposed) { _ls.Hide(); _ls.Dispose(); } 我应该使用RunWorkerCompleted事件吗? 这是使用Backgroundworker的正确方法吗?