我有一個c#Win Forms應用程序,我寫了它,它有兩個線程 - 主線程(GUI)和一個線程,每隔x秒(心跳)響應服務器是可重複使用的。 但是當我在主線程上運行一些代碼(刪除標籤,處理東西)gui得到的響應並且線程沒有發送心跳 - 我做錯了什麼? 謝謝:)一個線程不響應,而應用程序處理
線程創建這樣的:
thrMessaging = new Thread(new ThreadStart(ReceiveMessages));
thrMessaging.Start();
,實際上是一個線程負責所有的消息從療法服務器獲取 - 它是這樣的:
private void ReceiveMessages()
{
// Receive the response from the server
srReceiver = new StreamReader(tcpServer.GetStream());
while (Connected)
{
// Show the messages in the log TextBox
//this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] { srReceiver.ReadLine() });
try
{
String con = srReceiver.ReadLine();
string StringMessage = HttpUtility.UrlDecode(con, System.Text.Encoding.UTF8);
//MessageBox.Show("MESSAGE TRANSLATED:" + StringMessage);
processMessage(StringMessage);
}
catch (IOException e)
{
connectionTerminated();
}
}
}
因爲我需要proceesMessage函數來執行一些UI任務,所以它會這樣:
private void processMessage(string p)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
lastMessage = DateTime.Now;
//MessageBox.Show(p);
if (p == "AREYOUALIVE")
{
SendMessage("ye");
}
else if
......
}));
}
}
所以線程應該總是響應(每x秒)來自服務器的消息,詢問他是否還活着 - 當他正在執行時不會發生什麼。
你能告訴我們你在做什麼嗎?描述本身並沒有給出任何線索,爲什麼它不起作用。 – 2011-04-06 06:34:03
請給我們展示一些示例代碼 - 比如你如何設置你的線程,以及你的線程代碼做了什麼,然後更新UI,如果是的話,你是如何做到的。 – BugFinder 2011-04-06 06:35:03
沒有足夠的信息來了解您的問題。請分享代碼。後臺線程如何啓動?你使用System.Threading.Timer或其他計時器嗎?後臺線程是否與UI線程同步? – Disposer 2011-04-06 06:35:07