我有一個控制檯應用程序,它啓動另一個線程中的表單應用程序(來自另一個類)。從另一個線程訪問「RichTextBox」組件
但是,我不想在主線程中訪問我的主類中的richTextBox1
組件,並且拋出一個錯誤,說我試圖從另一個線程訪問該組件。
我的代碼: (窗體應用程序)
public partial class ChatGui : Form
{
public static RichTextBox textBox;
public ChatGui()
{
InitializeComponent();
richTextBox1.ReadOnly = true;
richTextBox1.BackColor = SystemColors.Window;
}
public void WriteLine(string line)
{
richTextBox1.Text += line+"\r\n";
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
WriteLine("[You]: "+textBox1.Text);
NetworkManager.SendPacket("rchat_msg " + textBox1.Text.Replace(" ", "%20"));
textBox1.Text = "";
e.Handled = true;
}
}
public void Exit()
{
Application.Exit();
}
private void ChatGui_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
}
主控制檯應用程序
public static void StartRemoteChat()
{
RemoteChat = true;
Program.ChatGui = new ChatGui();
new Thread(new ThreadStart(() =>
{
Application.Run(Program.ChatGui);
while (RemoteChat)
{
// ...
}
})).Start();
}
所以,我怎樣才能從我的主線程訪問richTextBox1
成分(我想改變一些變數的組件)沒有這個錯誤發生?
在一個側面說明,'應用。 Run()'是一個**阻塞**調用。你的'while(RemoteChat)'循環將**不會**,直到聊天表單被關閉**! –
@Idle_Mind哦,你是對的!謝謝 ! –