對於異步我很新,我理解一些一般概念,但似乎無法解決幾個問題。如何在異步方法中使用不同類中的其他函數
我有以下ReceiveCallback:
public static void ReceiveCallback(IAsyncResult AR)
{
Socket CurrentSocket = (Socket)AR.AsyncState;
int DataReceived = 0;
try
{
DataReceived = CurrentSocket.EndReceive(AR);
}
catch (SocketException)
{
CurrentSocket.Close();
return;
}
byte[] receivedBuffer = new byte[DataReceived];
Array.Copy(Buffer, receivedBuffer, DataReceived);
strReceived = Encoding.ASCII.GetString(receivedBuffer); // We are saving the latest receivedBuffer in a string.
new MainWindow().Process(); // We are accessing a function in the MainWindow class
receiveDone.Set();
CurrentSocket.BeginReceive(Buffer, 0, BufferSize, SocketFlags.None, ReceiveCallback, CurrentSocket);
}
這裏的 「過程()」 代碼:
public void Process()
{
lblReceived.Text = ClientSocket.strReceived; // Trying to set what we received in a label..
}
就行:「新主窗口()方法(); 「, 我收到以下異常:」其他信息:調用線程必須是STA,因爲許多UI組件都需要這個。「 我搜索了,並理解爲什麼它給了我例外,但幾個代碼沒有爲我工作。
該標籤不會改變,我知道我正在創建一個MainWindow的新實例,這就是爲什麼什麼都沒有顯示,但我正在尋找我如何通過使用新實例來更改標籤的示例。
提示 - 請勿在標題中添加標籤 - 違反如此的規則 – Muds 2015-03-25 12:27:54
正如狀態所示,「MainWindow」是一個主窗口,因此它必須是唯一的。有**可以只有一個主窗口。如果你想從異步創建窗口稱爲回調,那麼你的設計出現問題。這是一種糟糕的做法,請重新考慮這一點。 – dymanoid 2015-03-25 12:56:19
「創建窗口」?我只是創建一個對象來訪問在MainWindow類中找到的函數。 Asychnronous方法只是在單獨的課程上創建。 – 2015-03-25 14:14:22