タイマーを使用して、ログファイルを定期的に読み込み、C#で開発しているWindowsフォームアプリケーションのテキストボックスに特定のコンテンツを投稿しています。これを行うには、set_textbox_threadに文字列を送信します。この文字列は、以下のelseの適切なテキストボックス(tbc)にテキストを投稿します。以下のコードは、私が作成した練習用アプリケーションで機能します。ただし、同じコードが実行されますが、作成しているアプリケーション全体でテキストボックスを更新できません。Invokeステートメントで失敗しているようです。Invokeステートメントはset_textbox_threadを再度呼び出すことができません。私の理論では、私の完全なアプリケーションにはより複雑なコントロールのセットがあるため、正しいコントロールを介してInvokeを呼び出していません。親パネル、親フォーム、およびset_textbox_threadをトリガーするボタンを介してこれを呼び出してみましたが、同じ結果を処理しています。2つの質問:
- どのコントロールの下でInvokeを呼び出す必要がありますか?
- 「Windowsハンドルの基礎となるコントロールを所有するスレッドを取得する方法はありますか?Controls.Ownerメソッドを使用してこれを行うことはできますか?
- try / catchを使用してこのInvoke呼び出しを試みましたが、catchでエラーメッセージを取得できません。この方法で問題を解決する方法はありますか?
前もって感謝します!
private delegate void stringDelegate(string s);
private void set_textbox_thread(string s)
{
TextBox tbc = get_thread_tb();
if (tbc.InvokeRequired)
{
MessageBox.Show("Invoke Required");
stringDelegate sd = new stringDelegate(set_textbox_thread);
**this.Invoke(sd, new object[] {s });**
MessageBox.Show("Invoke Completed");
}
else
{