Windowsフォーム出力タイプのC#アプリケーションがあります。 bin/Debugまたはbin/Releaseフォルダから起動するとうまく動作します(Visual Studio Express 2008を使用して開発しています)。しかし、私はそのアプリケーションをReleaseフォルダから別のフォルダにコピーしたとき、私はそれを始める。時には、(ウィンドウが表示される前に)読み込みに時間がかかることがあります。また、ロードしても、グループボックスにあるテキスト領域は表示されません。C#Windowsフォームアプリケーションの起動時に何が起こっているかを知る方法はありますか
それが起こっている理由を私は知らないが、私は、アプリのロード中に起こっかを確認してみたいです。 C#Windows Formsアプリケーションの起動中に何が起こったのか知る方法はありますか?
更新:
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; }
}
}
そして、私はそれらの2行をコメントした場合、それが動作!:: 私はそのテキストエリアに、コンソール出力をリダイレクトするためのTextAreaは多少の遅延と負荷を消えて、アプリケーションことが判明しました
//_writer = new TextBoxStreamWriter(logTextArea);
//Console.SetOut(_writer);
しかし、私はまだ理解できません!
標準のWinformsコントロールを使用していますか?サードパーティ製のカスタムコントロールを使用している場合は、関連するDLLファイルと(場合によっては)ライセンス定義ファイルをコピーすることを忘れましたか? –
一度に1文字ずつテキストを追加するのは非常に高価です。一度に1文字ずつControl.Invoke()を呼び出すと、高価です。追加と呼び出しの回数を最小限に抑えるために、出力をバッファリングする必要があります。また、可能なクイックフィックスのためにWriteLine()をオーバーライドします。 –