2

Dang - 10 年間の C# プログラミングを行ってきましたが、この言語には C++ のようなデストラクタがないという事実にまだ対処できません。99.9% の場合は問題ではありませんが、今では問題になっています。

私はユーザーコントロールを持っています。そのコントロールは、セカンダリ スレッドを起動します。セカンダリ スレッドを終了するために Dispose() をオーバーライドしましたが、すべて動作します。

まで....誰かがフォームを閉じるときに MyControl.Dispose() を呼び出すのを忘れています。その後、セカンダリ スレッドが終わらない終了信号を待機している間、アプリが終了することはありません。

コントロールをフォームに配置してアプリを実行し、ウィンドウの閉じるボタンをクリックするだけの簡単なことにヘルプトピックを含める必要があるのは、私には正しくないようです。「このコントロールを使用する場合は、MyControl.Dispose() を呼び出す必要があります!」のようなものです。(もちろん誰も読まない)

私の考えでは、コントロールはインスタンス化され、他の相互作用なしに自動的に破壊される必要があります。これはC#では不可能ですか?私のコントロールがコンテナオブジェクトが閉じたことを自動的に知る方法がわからないので、ファイナライズする必要がありますか?

4

2 に答える 2

1

クレジットは Idle_Mind に送られますが、彼のコメントに回答としてフラグを立てることができませんでした。だから私は自分の質問に答えて、彼にクレジットを与えます....

手動スレッドで同じことを実現するには、Thread の Thread.IsBackground() プロパティを true に設定します。これで、BackgroundWorker() と同様に、アプリケーションの終了時にスレッドが自動的にシャットダウンされます。

于 2013-05-23T14:17:07.323 に答える