2012-05-03 17 views
8

मैं अपने वर्ग पुस्तकालय में StorageFile का एक उदाहरण बनाने के लिए कोशिश कर रहा हूँ में StorageFile Async उपयोग ...एक गैर मेट्रो आवेदन

var localFolder = ApplicationData.Current.LocalFolder; 
StorageFile destinationFile = await localFolder.CreateFileAsync(destination, CreationCollisionOption.GenerateUniqueName); 

VS11 निर्माण नहीं कर रहा है कहते हैं: 'का इंतजार है' की आवश्यकता है कि प्रकार 'विंडोज। फाउंडेशन। एशियासिंपरेशन 'के पास एक उपयुक्त GetAwaiter विधि है। क्या आप 'सिस्टम' के लिए एक प्रयोग निर्देश खो रहे हैं?

स्पष्ट रूप से मैं लक्ष्य के रूप में .net 4.5 का उपयोग कर रहा हूँ और मैं विंडोज सभाओं को संदर्भित कर रहा हूँ ... यकीन नहीं क्यों MetroStyle में इस कोड को काम, लेकिन एक वर्ग पुस्तकालय में निर्माण नहीं करता है ... मैं कैसे Storagefile का एक उदाहरण बना सकते हैं कक्षा पुस्तकालय में ??? इस चरण में यह महत्वपूर्ण नहीं है अगर फ़ाइल async तरह से बनाया जाता है ... पर

कृपया मुझे अपने विचार साझा करें ... Stelio

+0

मेट्रो शैली में, क्या कोड फ़ाइल के शीर्ष पर कोई अतिरिक्त विवरण हैं? –

+0

वही उपयोग कर रहे हैं ... –

उत्तर

5

ऐसा लगता है कि WinRT से एक प्रकार का उपयोग करने की कोशिश कर रहे पुस्तकालयों क्योंकि StorageFileclass documentation बताता है कि यह केवल मेट्रो पर लागू होता है और यह Windows.Storage में पाया जाता है।

This blog post इसे कैसे बनाया जाए, इसके माध्यम से चला जाता है, लेकिन यह एक मैन्युअल प्रक्रिया प्रतीत होता है। यह भी त्रुटि के कारण विवरण:

Using the await keyword causes the compiler to look for a GetAwaiter method on this interface. Since IAsyncOperation does not define a GetAwaiter method, the compiler wants to look for an extension method.

असल में, यह आप की तरह के लिए एक संदर्भ जोड़ने की जरूरत है दिखता है: System.Runtime.WindowsRuntime.dll


कृपया अपने ब्लॉग पोस्ट को पढ़ने के लिए समय लेने के लिए है, लेकिन मैं लूंगा स्पष्टता के लिए यहां महत्वपूर्ण हिस्सा डालें।


ब्लॉग unceremoniously चोरी के नीचे सामग्री

पहले, नोटपैड में, मैं EnumDevices.cs में निम्नलिखित सी # स्रोत कोड बनाया:

using System; 
using System.Threading.Tasks; 
using Windows.Devices.Enumeration; 
using Windows.Foundation; 

class App { 
    static void Main() { 
     EnumDevices().Wait(); 
    } 

    private static async Task EnumDevices() { 
     // To call DeviceInformation.FindAllAsync: 
     // Reference Windows.Devices.Enumeration.winmd when building 
     // Add the "using Windows.Devices.Enumeration;" directive (as shown above) 
     foreach (DeviceInformation di in await DeviceInformation.FindAllAsync()) { 
      Console.WriteLine(di.Name); 
     } 
    } 
} 

दूसरा, मैं एक Build.bat बनाया फ़ाइल जो मैं इस कोड को बनाने के लिए डेवलपर कमांड प्रॉम्प्ट से चलाता हूं (यह 1 लाइन होनी चाहिए लेकिन मैं इसे पढ़ने की क्षमता के लिए यहां लपेटता हूं):

csc EnumDevices.cs 
/r:c:\Windows\System32\WinMetadata\Windows.Devices.Enumeration.winmd 
/r:c:\Windows\System32\WinMetadata\Windows.Foundation.winmd 
/r:System.Runtime.WindowsRuntime.dll 
/r:System.Threading.Tasks.dll 

फिर, कमांड प्रॉम्प्ट पर, मैं आउटपुट देखने के लिए EnumDevices.exe चलाता हूं।

+0

मुझे लगता है कि यह इंगित किया जाना चाहिए कि जेफरी रिचटर ने अपनी पोस्ट में क्या देखा है: गायब असेंबली सिस्टम है। रनटाइम। WindowsRuntime.dll। – svick

+0

दोस्तों, त्वरित प्रतिक्रिया के लिए धन्यवाद ... मैं विंडोज 8 (एक गैर-मेट्रो संदर्भ में) पर एक WPF अनुप्रयोग से पृष्ठभूमि डाउनलोडर का उपयोग करने की कोशिश कर रहा था, लेकिन मुझे लगता है कि यह एक अच्छा विचार नहीं है और बीआईटीएस का उपयोग करना बेहतर है .... लेकिन मुझे लगता है कि windowsRuntime के साथ इंटरऑप का उपयोग करना एक अच्छा विचार नहीं है ... –

+0

मुझे ब्लॉग से उदाहरण चलाने की कोशिश करते समय निम्न त्रुटि मिलती है: 'numDevices.cs (14,35): त्रुटि CS4028 : 'प्रतीक्षा' की आवश्यकता है कि 'विंडोज़। फाउंडेशन.आईएसआईएनसीओपीएशन <विंडोज़। डेविसिस.इनीमेशन। डेविस इन गठन चयन>' एक उपयुक्त GetAwaiter विधि है। क्या आप 'सिस्टम' के लिए निर्देश का उपयोग कर रहे हैं? ' – Hjulle

1

यह पोस्ट के बाद से एक लंबे समय होना चाहिए जब मैं जोड़ने संदर्भ के बाद:
System.Runtime.WindowsRuntime.dll
System.Threading.Tasks.dll

और लक्षित कर खिड़कियों 8 प्रोजेक्ट फ़ाइल में:

<PropertyGroup> 
    <TargetPlatformVersion>8.0</TargetPlatformVersion> 
    </PropertyGroup> 

ऊपर उल्लिखित उदाहरण वीएस में संकलित किया जा सकता है।

+0

अगर आप कुछ पूछना चाहते हैं तो कृपया एक अलग प्रश्न पोस्ट करें। – thumbmunkeys

10

क्या मेरे लिए काम किया "मैन्युअल" TargetPlatformVersion

<PropertyGroup> 
    <TargetPlatformVersion>8.0</TargetPlatformVersion> 
</PropertyGroup> 

और आइटम समूह में जोड़ने के लिए जोड़ें है निम्नलिखित

<ItemGroup> 
    <Reference Include="System.Runtime.WindowsRuntime" /> 
    <Reference Include="System.Runtime" /> 
    <Reference Include="Windows" /> 
</ItemGroup> 

तो परियोजना normaly संकलन चाहिए।

+1

बहुत बहुत धन्यवाद !!! इसे उत्तर –

8

मुझे एक ही समस्या थी। समस्या नामस्थान हेडर में सिस्टम नेमस्पेस गायब है। मैंने बस नामस्थान में सिस्टम शामिल किया और यह काम किया। आशा करता हूँ की ये काम करेगा।

+1

के रूप में चिह्नित किया जाना चाहिए यह वास्तव में मेरे लिए काम करता है। –

संबंधित मुद्दे