2011-12-13 12 views
-1

特定のフォームで特定のプロシージャを実行すると、プログラムがフリーズする問題があります。ポップアップメニューをクリックすると、プログラムがフリーズまたは停止します。 (ファンクション)

私はこれを問題のないプログラムの他の領域で何回も実行しました。

私は、ブレークポイントまたはShowMessageをプロシージャの前または上に置くと、スムーズに実行されることがわかりました。

また、私がウィンドウ(ソフトウェア)から出て、戻ってきたら、それは動作しますか?(私がちょうどウィンドウのスタートボタンをクリックすると...)どんなアイデアですか?

ありがとうございます!

+1

スレッドを使用していますか?正確にどこが凍結されていますか? (アプリケーションが応答しなくなったときにアプリケーションを一時停止し、コールスタックを確認します)。 –

+1

一時停止を実装するためにあなたは何をしていますか? –

+9

症状よりむしろ病気を治す –

答えて

0

ここで私はそれを修正しました。私がこれまでに気付かなかった解決策を説明するのに必要な情報を加えて、質問に関連していました。

呼び出された関数にポップアップメニューからアクセスしました。

メインフォームのポップアップメニューが表示され、プロパティが設定されていなくても、私がPageControl(メインフォームの一部ではない)を右クリックしたときに何らかの理由でポップアップが表示されていました。

解決策 - PageControl PopupMenuプロパティにメインフォームのポップアップメニューを追加しました。

フリーズしません!

ありがとうございました。

2

これは問題を解決するための正しいアプローチのようには思えませんが、DelphiのTTimerクラスを使用すると、指定された時間だけ待機して、何らかのプロセスがハングアップしている状態で続行することができます。

既存のコードには論理的な問題があると思われますが、タイミング修正は特定の環境でのみ問題を解決することになります。

+0

私は私のプログラムの多くの異なる場所でこの機能を使用します。このフリーズの問題は、プログラムのこの特定の領域(フォーム)で呼び出されたときにのみ発生します。私は単純なブレークポイントを置く場合、それは障害なく正常になります。私はTTimerのアプローチに感謝します。 – Trevor

+4

タイマーは待つ方法ではありません。タイマーは定期的な間隔で突き刺してそれらのポークに応答する方法です。待機したい場合は 'Sleep'を使います。しかし、ここで何度も言いましたように、「睡眠」が解決策であれば、おそらく問題を理解できません。 –

関連する問題