2011-12-27 11 views
1

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); 

しかし、私はまだ理解できません!

+0

標準のWinformsコントロールを使用していますか?サードパーティ製のカスタムコントロールを使用している場合は、関連するDLLファイルと(場合によっては)ライセンス定義ファイルをコピーすることを忘れましたか? –

+1

一度に1文字ずつテキストを追加するのは非常に高価です。一度に1文字ずつControl.Invoke()を呼び出すと、高価です。追加と呼び出しの回数を最小限に抑えるために、出力をバッファリングする必要があります。また、可能なクイックフィックスのためにWriteLine()をオーバーライドします。 –

答えて

3

、このコードを配置:

System.Diagnostics.Debugger.Launch() 

それはそれはあなたにプロセスをアタッチするチャンスを与えるだろう、この行を打ったとき、あなたは例外を取得し、そこから自分のコードを実行します。デバッガ。

1

あなたのアプリケーションですか?アプリケーションの.configファイルには、TextBoxにテキストを表示するかどうかを示す設定など、いくつかの構成設定があります( など)。

コピーの.configファイルを.exeファイルと一緒に、何が起こるか参照してください。

EDIT:

あなたがアプリケーション

かの行動を監視するために、SysinternalsのProcess Monitorを使用することができ、Rohitab API monitor

の両方が監視\デバッグ用途のための優れたツールです。

+0

はい、それは私のアプリケーションであり、設定ファイルもコピーしました。最初に私はそれがアセンブリの署名をチェックしようとしたからだと思っていましたが、を設定に追加しました。助けてくれなかった。そして、私はTextBoxの可視性を全く操作しません。 – vmg

+0

Ok、TextBoxは単なる例でした。アプリケーションをコーディングしたかどうかは分かりませんでした。 – Shai

1

あなたは十分に速くしている場合は、デバッグに行き、VSに切り替え、それから誤動作の場所からアプリケーションを起動でき - >プロセスにアタッチ。リスト内のプロセスを見つけ、それに本当に簡単にアタッチしてから、一時停止ボタンを押してコードをステップ実行します。

これは、いくつかの練習が必要かもしれないが、私は通常、かなり迅速にそれを行うことができます。エラーをスローラインの前に

関連する問題