0

自分のマシンでアプリケーションの特定の部分を実行できないユーザーがいます。アプリケーションがハングするのは、このユーザーのこのマシン上だけです。ユーザーは、資格情報を使用して他のマシンで正常に実行できます。また、他のユーザーは、自分の資格情報で正常に実行できます。

イベントログは役に立ちません。アプリケーションが応答を停止したというだけです。ロギングの記録を停止する前にアプリがどこまで到達するかを確認するために、いくつかのロギングを追加しましたが、最後のロギング エントリはコードの重要でない部分にあります (つまり、ラベルを表示します)。

backgroundworker_DOWORK への呼び出しをコメントアウトすると、アプリがハングしないため、問題が backgroundworker にあることはわかっています。

問題は何ですか?これをすべて試した後、どこから始めればよいかさえわかりません。特定のマシンの特定のユーザーにのみ発生する可能性のある問題の種類は?

4

4 に答える 4

1

「イベント ログは役に立ちません。アプリケーションが応答を停止したとだけ表示されます。」

2 回目の例外 (デバッガーがキャッチできる 1 回目の例外 - それ以外の場合は 2 回目の例外) が発生する状況では、単純に DebugDiag を使用します (これには、ハング時にキャプチャされたメモリ ダンプに対して実行できる多くのルールがあります)。 )。あるいは、windbg を使用することもできます。これはかなりハードコアですが、基本を知る価値があります。

詳細を調べることができると確信しています 。デバッグ診断ツールの使用方法を始めましょう。

詳細情報を入手するのに最適な Web サイトは、 Tess Ferrandez です。

于 2012-04-05T06:23:07.730 に答える
1

いくつかの可能性があります:

  • レジストリ キーの破損または欠落

  • ファイル許可の問題

  • ユーザープロファイルに保存される設定

次の 2 つの方法を使用できます。

  • Process Monitor を使用して、リソースへの同じアクセスの後に問題が発生するかどうかを確認します

  • バックグラウンド ワーカーの一部を無効にして、アプリケーションのハングの原因となっているコードを分離します。

于 2012-04-04T20:57:55.810 に答える
1

あなたの質問はかなり漠然としていますが、BackgroundWorker を使用して経験していたランダムなクラッシュを思い出させます。私は時々何週間も行き、プログラムがクラッシュしたという苦情がここに来ることはありませんでした。他の日には、10件ほどの苦情がありました。私が経験していた問題は、UI を変更したことが原因であることが判明しました。テキスト ボックスの Text プロパティの変更などの UI 値の変更は、メイン スレッドに対する安全でないスレッド呼び出しと見なされます。すべての UI の変更は、DoWork メソッドではなく、メイン スレッドで行う必要があります。UI を変更する必要がある場合は、バックグラウンド ワーカーの ReportProgress メソッドを使用するか、以下を参照して InvokeRequired プロパティをチェックするコードを変更します。UI から値を読み取ることは問題ではありません。値を設定/変更する場合のみです。

private void SetText(string text)
{
    // InvokeRequired required compares the thread ID of the
    // calling thread to the thread ID of the creating thread.
    // If these threads are different, it returns true.
    if (this.textBox1.InvokeRequired)
    {   
        SetTextCallback d = new SetTextCallback(SetText);
        this.Invoke(d, new object[] { text });
    }
    else
    {
        this.textBox1.Text = text;
    }
}

http://msdn.microsoft.com/en-us/library/ms171728.aspxを参照してください。

あなたの質問を読み直してください。この部分は私に突き出ています。

「ログの記録を停止しますが、最後のログ エントリはコードの重要でない部分にあります (つまり、ラベルを表示します)。」

Visible プロパティを変更したり、DoWork イベント ハンドラでラベルのテキストを変更したりする場合、これが問題になる可能性があります。このコードを ReportProgress イベント ハンドラに移動するか、上記の InovokeRequired メソッドを使用して問題を回避してください。

于 2012-04-04T21:12:51.430 に答える
0

それはTableAdapter.Fillメソッドであり、UIコントロールにバインドされたデータセットを埋め、データを埋めることは明らかに大きな問題を引き起こしていました。なぜそれが皆のためにこれをしなかったのか、私にはわかりません。

ここで答えを参照してください。

于 2012-04-12T00:21:08.770 に答える