我有一个带有Windows窗体输出类型的C#应用程序。当我从bin / Debug或bin / Release文件夹启动它时,它工作正常(我使用Visual Studio Express 2008开发它)。但是当我将该应用程序从Release文件夹复制到另一个文件夹时,我启动它,发生了一些奇怪的事情。有时它加载的时间太长(在窗口显示之前),甚至加载时,位于“组”框中的文本区域也不可见!
我不知道为什么会这样,但我想试着看看在app加载期间发生了什么。 有没有办法知道C#Windows窗体应用程序启动过程中发生了什么?
更新 我发现TextArea消失了,应用程序加载有一些延迟,因为我将控制台输出重定向到该文本区域:
public class TextBoxStreamWriter : TextWriter
{
TextBox _output = null;
delegate void SetTextCallback(char value);
public TextBoxStreamWriter(TextBox output)
{
_output = output;
}
public override void Write(char value)
{
if (MainForm.closed)
return;
base.Write(value);
if (_output.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(Write);
_output.Invoke(d, new object[] { value });
}
else
{
_output.AppendText(value.ToString());
}
}
public override Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
如果我评论这两行,它就可以了!:
//_writer = new TextBoxStreamWriter(logTextArea);
//Console.SetOut(_writer);
但我仍然不明白为什么!
答案 0 :(得分:3)
在抛出错误的行之前,请输入以下代码:
System.Diagnostics.Debugger.Launch()
从获得异常的位置运行代码,当它到达此行时,它将为您提供将进程附加到调试器的机会。
答案 1 :(得分:1)
是你的申请吗?应用程序的.config文件中可能存在一些配置设置, 例如,一个指示是否在TextBox中显示Text的设置。
将.config文件与.exe一起复制,看看会发生什么。
编辑:
您可以使用SysInternals中的Process Monitor来监控应用程序的操作
两者都是监控\调试应用程序的绝佳工具。
答案 2 :(得分:1)
如果你足够快,你可以从它发生故障的位置启动应用程序,切换到VS,转到Debug - >附加到流程。找到列表中的进程,快速连接到该进程,然后按暂停按钮并开始单步执行代码。
可能需要一些练习,但我通常可以很快地完成。