मैं अपने पृष्ठ को चेतावनी देना चाहता हूं कि प्रेषित डेटा पूरा हो गया है। मैं ऑब्जेक्ट बनाता हूं, इवेंट हैंडलर जोड़ता हूं और सर्वर पर एसिंक ट्रांसमिट डेटा के लिए नया थ्रेड कॉल करता हूं। जब डेटा प्रसारित होता है, और सर्वर उत्तर से पुन: प्राप्त होता है तो मैं अपना ईवेंट कॉलबैक करता हूं, लेकिन अपवाद 'अवैध क्रॉस-थ्रेड एक्सेस' को फेंक देता हूं। मेरा ईवेंट हैंडलर क्यों नहीं चलाएं?WP 7 मल्टीथ्रेडिंग, अमान्य क्रॉस-थ्रेड एक्सेस
// My page (PhoneApplicationPage)
public partial class PageStart
{
private void btn_Send_Click(object sender, RoutedEventArgs e)
{
TransmitHolder holder = new TransmitHolder();
holder.onCompleted += new TransmitHolder.CompleteHandler(onCompleted);
// transmit async
new Thread(delegate() { Transmitter(holder).Start(); }).Start();
}
private void onCompleted(object sender, byte[] answer)
{
//some code
}
}
public class TransmitHolder
{
public delegate void CompleteHandler(object sender, byte[] answer);
public event CompleteHandler onCompleted;
public void Complete(byte[] answer)
{
if (onCompleted != null)
{
onCompleted(null, answer); // here throw exception `invalid cross-thread access`
}
}
}
public class Transmitter
{
private TransmitHolder holder;
public Transmitter(TransmitHolder holder)
{
this.holder = holder;
}
// send data from server
public void Start()
{
// send data using soket
NetworkManager nm = new NetworkManager();
// method Send execute Connect, Send and Recive data from server
byte[] answer = nm.Send(Encoding.UTF8.GetBytes("hello_word"));
holder.Complette(answer); // notify, send data completed
}
}
कृपया 'ऑनकंपलेटेड' विधि के अंदर कोड पोस्ट करें। – Tudor