I am new to C#, and I tried to look at the earlier posts but did not find a good answer. In a C# Windows Form Application with a single form, is using better or ? MSDN says that all resources within the object are closed and the form is disposed when...
C#-windows での作業で非常に深刻なエラーが検出された。C#ウィンドウを動かし続けると、数秒後にターミナルが画面から消えてしまい、terminal64.exeのCPUコア負荷が100%を超えてしまう。私は8コアなので、CPUのTaskManagerのフルコア負荷は12-13%です。C#ウィンドウが動いているときは19%。
おお、クールだ。試してみると、本当に消えます。というか、消えず、まるで「最小化」ボタンを押したかのようにトレイに最小化される。
100%ロードについては、私は見ていません。おそらく、あなたにはそれが組み込まれていて、私には組み込まれていないからでしょう。
GuiControllerElementsDemoを ターミナルメニューから手動で削除すると、数秒間フリーズする。
そのようなことがあります。事前に手動でフォームを閉じていない場合にのみ発生します。回避方法はまだわかりません。Deinit()でフォームを閉じる方法をいくつか試しましたが、どれもうまくいきませんでした。どなたか方法をご存じでしたら教えてください。
これがある。あらかじめ手動でフォームを閉じておかないと起きない。これを回避する方法はまだわからない。Deinit()でフォームを消滅させる方法をいくつか試したが、どれもうまくいかなかった。誰か方法を知っていたら教えてほしい。
なぜ標準のハンドラ private void Form2_FormClosing(object sender, FormClosingEventArgs e)
が動作しないのでしょうか?
C#でdllの実験をしていたとき、なぜか終了時にすべてがクラッシュした:
MQLからフォームを閉じる前に破棄しないと、ひどく遅くなったり、クラッシュしたりしました。
おお、クールだ。試してみたら、確かに消えた。というか、消えず、「最小化」ボタンが押されたかのようにトレイに最小化される。
ターミナル・ウィンドウ自体を動かしてみた(C#は起動していない)。約10秒で、まったくすべてのウィンドウ(ME、ブラウザなど)が最小化され、デスクトップがむき出しになった。
100%のロードについては、私はそれを見ません。おそらくそれは、あなたにはそれが組み込まれていて、私には組み込まれていないからでしょう。
同時にExpert Advisorの実行もモニターしてみた。これがその結果だ。
ターミナル・ウインドウが動いている間、Expert Advisorの動作が停止しているのがよくわかる。
同時にExpert Advisorの実行もモニターした。結果は以下の通りだ。
ターミナル・ウインドウが動いている間、Expert Advisorが動作を停止していることがよくわかる。
タイマーで確認しましたが、ハングアップは見られませんでした。ログへの送信も非常に速い。
そして、なぜ標準ハンドラ private void Form2_FormClosing(object sender, FormClosingEventArgs e) なのか?
が動作しないのでしょうか?
C#でdllの実験をしていたとき、なぜか終了時にすべてがクラッシュしてしまった:
MQLからフォームを閉じる前に破棄しないと、ものすごく遅くなったり、クラッシュしたりしました。
私は、標準のform.Dispose()を使おうとしました。つまり、GuiController::HideForm()が呼ばれると、対応するフォームのDisposeが呼ばれる。 C#のテストアプリケーションではすべてうまくいった。しかし、MTではうまくいかない。しかし、Expert Advisorを削除する前に手動でフォームを閉じると、すべてうまくいく。
標準の form.Dispose() を使ってやってみました。つまり、GuiController::HideForm()が呼び出されると、対応するフォームのDisposeが呼び出される。 C#のテストアプリケーションではすべてうまくいった。しかし、MTではうまくいかない。しかし、Expert Advisor を削除する前に手動でフォームを閉じると、すべてうまくいく。
ここでは 即座にアンロードされる。
ここでは 即座にアンロードされる
はい、パネルを拝見しました。どの関数を使ってアンロードしているのですか?
標準の form.Dispose() を使ってやってみました。つまり、GuiController::HideForm()が呼び出されると、対応するフォームのDisposeが呼び出される。 C#のテストアプリケーションではすべてうまくいった。しかし、MTではうまくいかない。しかし、Expert Advisor を削除する前に手動でフォームを閉じると、すべてうまくいく。
ぜひググってみてほしい。いくつかのプロセスがウロウロしている。
あるいは、アプリケーションを閉じるには、やはりWindowsのForm.Close()を呼び出す必要がある。
https://stackoverflow.com/questions/3097364/c-sharp-form-close-vs-form-dispose
Close を呼び出さないことは、おそらく Win32 メッセージの送信を回避することになるでしょう。
Close にはイベントを発生させる (キャンセルできる) という利点があるので、(フォームの) 部外者は FormClosing と FormClosed を見て、それに応じて反応することができます。
フォームを単に破棄した場合に、FormClosing や FormClosed が発生するかどうかはわかりませんが、それはあなたの実験にお任せします。
はい、あなたのパネルを見ました。どの関数を使ってアンロードしていますか?
public static class FormsMT5 { private static Form1 MainForm; private static Form2 OrderForm; private static Thread ThreadMainform, ThreadOrderForm; .................... public static void FormDeinit(int reason) { if (reason == 3 || reason == 5) return; if (MainForm != null) { MainForm.Close(); } if (OrderForm != null) { OrderForm.Close(); } if (ThreadMainform != null) ThreadMainform.Join(); if (ThreadOrderForm != null) ThreadOrderForm.Join(); MainForm = null; OrderForm = null; ThreadMainform = null; ThreadOrderForm = null; }はい、あなたのパネルを見ました。どのファンクションを使ってアンロードしているのですか?
イゴールの パネルだよ。ちょうど公開したところだ。