मैं समझने की कोशिश कर रहा हूं कि डेटा के एक सेट को असीमित रूप से डेटा के सेट को पकड़ने के लिए सही कोड क्या है जब मुझे क्लाइंट lib की पहुंच नहीं है, तो मैं पुनर्प्राप्त करने के लिए उपयोग कर रहा हूं डेटा। मैं एक एंडपॉइंट और डेट रेंज निर्दिष्ट करता हूं और मुझे प्लेलिस्ट की एक सूची पुनर्प्राप्त करना है। मेरे पास अब स्टार्ट() कॉल के बाद कभी वापस नहीं आता है। नोट: यह WinForm में चल रहा है। मैं कार्य को बेहतर ढंग से समझने की कोशिश कर रहा हूं और सिर्फ प्रतीक्षा या पृष्ठभूमिवर्कर पर कूदना नहीं चाहता हूं। मुझे पता है कि मैं कहीं खो गया हूँ।सी # और कार्य - यूआई थ्रेड हैंग - प्री-असिंक/कीवर्ड का इंतजार
private void GoButtonClick(object sender, EventArgs e)
{
string baseUrl = "http://someserver/api";
var startDateTime = this._startDateTimePicker.Value;
var endDateTime = this._endDateTimePicker.Value;
_getPlaylistsFunc = delegate()
{
var client = new PlaylistExportClient(baseUrl);
return client.GetPlaylistsByDateRange(startDateTime, endDateTime).ToList();
};
var task = new Task<List<Playlist>>(_getPlaylistsFunc);
task.ContinueWith((t) => DisplayPlaylists(t.Result));
task.Start();
}
private void DisplayPlaylists(List<Playlist> playlists)
{
_queueDataGridView.DataSource = playlists;
}
अद्यतन मैं ये परिवर्तन किए, लेकिन अब आवेदन यूआई धागा लटका रहा है।
private void GoButtonClick(object sender, EventArgs e)
{
string baseUrl = "http://someserver/api";
var startDateTime = this._startDateTimePicker.Value;
var endDateTime = this._endDateTimePicker.Value;
var token = Task.Factory.CancellationToken;
var context = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() =>
{
var client = new PlaylistExportClient(baseUrl);
_queueDataGridView.DataSource = client.GetPlaylistsByDateRange(startDateTime, endDateTime).ToList();
},token,TaskCreationOptions.None,context);
}
यदि आप 'GetPlaylistsByDateRange' में ब्रेकपॉइंट डालते हैं तो क्या आप देखते हैं कि इसे वास्तव में बुलाया जाता है? – user7116
आपको निरंतरता के लिए एक सिंक संदर्भ पारित करने की आवश्यकता होगी ताकि यह किसी अन्य थ्रेड पूल थ्रेड के बजाय UI थ्रेड में चल सके। इसके अलावा, मुझे यहां कोई वास्तविक त्रुटियां नहीं दिखाई देती हैं। – Servy
आपका अपडेट यूआई थ्रेड पर * सभी * कार्यों को चलाता है। केवल दूसरा भागना चाहिए। –