Tag: portable class library

将async lambda表达式转换为委托类型System.Func ?

我有一个带有此签名的可移植类库中的异步方法: private async Task _Fetch(Uri uri) 它获取一个被回送为具体类型T的资源。 我正在使用第三方缓存库( Akavache ),它需要一个Func作为参数之一,并试图以这种方式这样做: await this.CacheProvider.GetOrCreateObject(key, async () => await _Fetch(uri), cacheExpiry); 这会导致错误: 无法将异步lambda表达式转换为委托类型’ System.Func ‘。 异步lambda表达式可能返回void , Task或Task ,其中任何一个都不能转换为’ System.Func ‘。 我已经尝试了Func赋值的各种排列而没有任何运气,我可以让代码工作的唯一方法是使Func阻塞: await this.CacheProvider.GetOrCreateObject(key, () => _Fetch(uri).Result, cacheExpiry); 哪个死了我的应用程序。 关于我误入歧途的任何指示?

为什么我不能在我的可移植类库中调用Delegate.CreateDelegate?

我有以下问题:我想从我的针对.NET 4.5,Windows Phone 8和Windows 8 Store Apps的可移植类库中调用Delegate.CreateDelegate ,但我的代码无法编译。 编译器说它无法在Delegate类型上找到该方法。 有趣的是,例如Microsoft的PRISM库可以从便携式类库中调用’Delegate.CreateDelegate’。 它在DelegateReference类中执行此操作。 PRISM便携式类库面向.NET 4.0,Windows 8商店应用程序,Windows Phone 8和Silverlight 5(因此是一个更具限制性的集合)。 不编译的代码如下所示: public class MyClass { public void MyMethod(EventHandler handler) { var @delegate = Delegate.CreateDelegate(typeof (OpenEventHandler), null, handler.GetMethodInfo()); } } public delegate void OpenEventHandler(T target, object sender, EventArgs arguments); 可以在此处下载示例: https : //dl.dropboxusercontent.com/u/14810011/PortableClassLibraryReferenceProblem.zip 它包含我的库项目和PRISM PubSubEvents项目的非常剥离版本,该项目仅包含DelegateReference类及其接口。 后者的完整源代码可以在这里找到: http : //prismwindowsruntime.codeplex.com/SourceControl/latest […]

我需要做些什么来使这个代码在Portable Class Library中工作?

我想知道可移植类库在function上是否比Compact Framework更受限制。 我正在尝试将CF / Windows CE应用程序(在手持设备上运行)移植到Xamarin解决方案,该解决方案将针对Android,iOS,Windows Phone以及其他东西。 但是,我遇到的一个问题是这个遗留代码(在CF下运行): public static List GetXMLFiles(string fileType, string startingDir) { const string EXTENSION = “.XML”; string dirName = startingDir; // call it like so: GetXMLFiles(“ABC”, “\\”); <= I think the double-whack is what I need for Windows CE device…am I right? var fileNames = new List(); try { foreach […]

从Windows类库引用.NET标准库

目前我的解决方案中有两个项目: Windows类库(针对.NET Framework 4.6.1)和另一个面向.NET Standard 1.3的类库。 我正在使用Visual Studio 2015 Update 3。 我从其他项目添加了对.NET Standard项目的引用,它出现在引用列表中,但是当我想使用它时,我看不到引用库中的任何类或命名空间(即使引用的库已成功构建且没有错误)。 这是.NET标准库项目的project.json: { “version”: “1.0.0-*”, “dependencies”: { “NETStandard.Library”: “1.6.0” }, “frameworks”: { “netstandard1.3”: { “imports”: “dnxcore50” } } } 我认为.NET 4.6.1项目可以使用.NET Standard 1.3库,我甚至尝试使用较低版本(1.0),但结果是一样的。 我在这里想念的是什么? 如果我跑 dotnet恢复 它也工作正常: log : Restoring packages for C:\Users\Zsolt\Documents\Visual Studio 2015\Projects\PWB\PWBSpreadsheet.Entities\project.json… log : Restoring packages for C:\Users\Zsolt\Documents\Visual Studio 2015\Projects\PWB\PWBSpreadsheet.Parser\project.json… […]

可移植类库,相当于Dispatcher.Invoke或Dispatcher.RunAsync

在.NET,Windows 8和Windows Phone 7中,我的代码与此类似: public static void InvokeIfRequired(this Dispatcher dispatcher, Action action) { if (dispatcher.CheckAccess()) { action(); } else { dispatcher.Invoke(action); } } 我如何在便携式类库中做一些事情? 有一个平台无关的实现这将是很好的。 我的想法是使用WP7中没有的TPL,但肯定会很快。 // PortableDispatcher must be created on the UI thread and then made accessible // maybe as a property in my ViewModel base class. public class PortableDispatcher { private TaskScheduler […]

加载程序集Xamarin.Android.Support.v4时出现exception

我正在使用Xamarin.Forms在visual studio上工作 ,我得到以下错误: 加载程序集时出现exception:System.IO.FileNotFoundException:无法加载程序集’Xamarin.Android.Support.v4,Version = 1.0.0.0,Culture = neutral,PublicKeyToken =’。 也许它在Mono for Android配置文件中不存在? 文件名:Xamarin.Android.Tuner.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference,ReaderParameters参数)的Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(ICollection`1程序集,AssemblyDefinition程序集,布局topLevel)在Xamarin.Android.Tasks.ResolveAssemblies.Execute()SportBook.Droid 我该怎么办?

使用某些平台上存在的实际类型处理PCL中的缺失类型

这可能是某个问题的答案,但我似乎无法找到答案。 我正在开发一个将Mono.Data.Sqlite移植到Windows Phone和Windows Store的项目,但当然这也需要移植System.Data。 我决定使用PCL,因为这样就不需要为平台单独组装了(我也检查了Silverlight,但这不是优先考虑的事情)在这样做的过程中,除了一种类型之外,我设法获得了大部分function – DBNull 🙁 这就是问题所在,WP和SL声明了DBNull,但WinRT却没有。 是否可以在单个程序集中执行某些操作以在其存在的平台(WP和SL)上使用本机DBNull并在WinRT上使用自定义实现? 我似乎没有办法做到这一点。 我查看了其他解决方案:(a)为SL和WP创建PCL并排除DBNull类型和WinRT的另一个程序集,或者(b)创建一个引用WP和SL的自定义程序集的单个程序集,其类型转发到DBNull的本机实现,以及用于实现DBNull的RT的程序集。 有没有其他方法,或哪一个更好?

便携式类库和reflection

我正在为Desktop,Windows 8商店和Windows手机同时构建新的应用程序。 所以我创建了可移植类库,以便在所有平台上具有通用function。 我的问题是,当我尝试在PCL中重用我的代码时,我无法访问库中的一些方法和属性。 根据MSDN,支持这些方法,但我现在知道为什么我无法访问它们。 var property = memberExpression.Member as PropertyInfo; if (property == null) { } var getMethod = property.GetGetMethod(true); if (getMethod.IsStatic) {} 这是无法编译的代码片段。 GetGetMethod和IsStatic在Visual Studio编辑器中是红色的。 我不知道为什么会发生这种情况以及如何访问这些属性。 所以,如果那里的任何人做过类似的事情,请帮我编译这段代码。

如何为HttpWebRequest定义更积极的超时?

在可移植类库中,我有以下方法将数据发布到特定的Url。 该方法效果很好。 但是我想指定一个更积极的超时(默认为100秒)。 考虑到来自可移植类库的HttpWebRequest类没有Timeout属性,如何在超过几秒的时间内确保调用被放弃? public async Task PostAsync(Uri uri, string data) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = “POST”; request.ContentType = “application/x-www-form-urlencoded”; using (Stream requestStream = await request.GetRequestStreamAsync()) { byte[] postBytes = Encoding.UTF8.GetBytes(data); requestStream.Write(postBytes, 0, postBytes.Length); } HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); return new HttpResponse(response.StatusCode, await new StreamReader(response.GetResponseStream()).ReadToEndAsync()); }

如何实现Portable HttpClient的进度报告

我正在编写一个图书馆,意图在桌面(.Net 4.0及更高版本),手机(WP 7.5及以上版本)和Windows Store(Windows 8及更高版本)应用程序中使用它。 该库具有使用Portable HttpClient库从Internet下载文件的function,并报告下载的进度。 我在这里和互联网的其余部分搜索有关如何实施进度报告的文档和代码示例/指南,这次搜索让我无处可去。 有没有人有文章,文档,指南,代码示例或其他什么来帮助我实现这一目标?