जैसा कि मेरा कोड नीचे दिखाया गया है, अपलोड की गई छवि फ़ाइल कभी-कभी खाली पढ़ी जाती है (fileContents 0 पर सेट होती है) या आधी पढ़ी जाती है। जैसा कि मैंने परीक्षण किया है, मैं देख सकता हूं कि जब मैं डिबग मोड का उपयोग करके myViewModel.File.CopyToAsync(memoryStream); से myViewModel.Image =... पर धीरे-धीरे कदम बढ़ाता हूं तो fileContents को उचित मूल्य मिल रहा है। तो मेरा मानना ​​​​है कि मेमोरीस्ट्रीम कॉपी में कोई समस्या है लेकिन मुझे समझ में नहीं आता क्यों।

हालांकि जब मैं टिप्पणी System.Threading.Thread.Sleep(1000); को हटाकर धागा सोता हूं तो छवि को पढ़ना ठीक से किया जाता है और fileContents को उचित मूल्य मिलता है। क्या समस्या using (var memoryStream = new MemoryStream()) घोषणा के कारण हो सकती है? समस्या किस कारण से है और क्या धागे को सोने के बजाय इस मुद्दे को ठीक करने का कोई बेहतर तरीका है?

  if (myViewModel.File != null)
        {
            byte[] fileContents;
            using (var memoryStream = new MemoryStream())
            {
                myViewModel.File.CopyToAsync(memoryStream);
                //System.Threading.Thread.Sleep(1000);
                fileContents = memoryStream.ToArray();
                myViewModel.Image = new MyImage{ FileName = myViewModel.File.FileName, File = myViewModel.File, ContentType = myViewModel.File.ContentType, FileData = fileContents };
            }
        }
-1
DA_VDCT 31 जिंदा 2020, 12:48
3
निश्चित रूप से ऐसा तब होगा जब आप बिना प्रतीक्षा किए एसिंक विधि को कॉल करेंगे
 – 
Bizhan
31 जिंदा 2020, 12:49

2 जवाब

सबसे बढ़िया उत्तर

आप myViewModel.File.CopyToAsync(memoryStream) के पूर्ण होने की प्रतीक्षा नहीं कर रहे हैं।

या तो उपयोग करें

await myViewModel.File.CopyToAsync(memoryStream);

या एसिंक्स का बिल्कुल भी उपयोग न करें:

myViewModel.File.CopyTo(memoryStream);
1
Devesh S 31 जिंदा 2020, 12:53

समस्या यह है कि आप बिना प्रतीक्षा किए एक एसिंक्रोनस विधि को कॉल कर रहे हैं।

myViewModel.File.CopyToAsync(memoryStream);

क्या आप अपनी विधि को async के रूप में फिर से लिख सकते हैं और await शब्द का प्रयोग कर सकते हैं?

तब आप CopyToAsync विधि की प्रतीक्षा कर सकते हैं।

await myViewModel.File.CopyToAsync(memoryStream);

2
EM15 31 जिंदा 2020, 12:53