草庐IT

c# - 使用 WPF 在 C# 中异步加载 BitmapImage

使用WPF在C#中异步加载BitmapImage的最佳方法是什么? 最佳答案 我只是在研究这个,不得不投入我的两分钱,虽然在最初的帖子发布几年后(以防万一其他人来寻找我正在研究的同样的东西)。我有一个Image控件,需要使用Stream在后台加载它的图像,然后显示。我一直遇到的问题是BitmapSource、Stream源和Image控件都必须位于同一位置线程。在这种情况下,使用Binding并将其设置为IsAsynch=true将引发跨线程异常。BackgroundWorker非常适合WinForms,您可以在WPF中使用它,但我

c# - UOW - 在上一个异步操作完成之前,第二个操作在此上下文中开始

我正在尝试下面的代码,它有两个部分,一个是通过棱镜导航。当允许导航时,我会异步启动深度加载,但每次都有一个新的上下文。在后面的代码中,我想取消未完成此加载的挂起导航,但下面的代码甚至不起作用,所以取消是以后的事;-)导航逻辑:这里没有问题publicvoidOnNavigatedTo(NavigationContextnavigationContext){intrelatieId=(int)navigationContext.Parameters["RelatieId"];if(_relatie!=null&&_relatie.RelatieId==relatieId)return;l

c# - 纤程与异步等待

我正在加入一个C#项目,开发人员在其中大量使用Fibers.在这个项目之前我什至没有听说过它们并且以前使用过asyncawait和Threads和BackgroundWorker来进行我的多任务操作。今天我问他们为什么使用Fiber,主要开发人员说这样更容易调试。这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高层的变量。我想知道使用Fiber与使用新的asyncawait和使用Thread的优缺点是什么。PS:我们使用的是.Net4.5 最佳答案 IwasaskingthemwhytheyusedFibersandthem

c# - 将库重构为异步,如何避免重蹈覆辙?

我有这样一个方法:publicvoidEncrypt(IFilefile){if(file==null)thrownewArgumentNullException(nameof(file));stringtempFilename=GetFilename(file);using(varstream=newFileStream(tempFilename,FileMode.OpenOrCreate)){this.EncryptToStream(file,stream);file.Write(stream);}File.Delete(tempFilename);}不过,我想写另一个方法,非常相

c# - 为什么我必须使用等待异步运行的方法。如果我不想在继续之前等待方法完成怎么办?

这个问题在这里已经有了答案:Fire-and-forgetwithasyncvs"oldasyncdelegate"(5个答案)关闭7年前。我整天都在翻阅MSDN文档,他们的异步编码理念让我感到困惑。据我了解,如果调用异步方法,调用异步方法的线程不会被阻塞。然而,async在示例中总是与await配对,这似乎否定了异步性,使得外部方法无论如何都必须等待代码执行。我不应该能够调用异步方法然后继续执行外部方法吗?我或多或少遇到过这种情况:voidreportSomethingHappened(info)-Collectinfo-HTTPPOSTinfotologgingserver(ie.

c# - 如何对在 MVVM 中调用异步方法的 DelegateCommand 进行单元测试

我是单元测试MVVM的新手,在我的项目中使用PRISM。我正在对我们当前的项目实现单元测试,但没有幸运地在线找到可以告诉我如何测试调用异步方法的DelegateCommand的资源。这是我的帖子的后续问题-HowtoUnitTestaViewModelwithasyncmethod.关于如何在MVVM中对异步方法进行单元测试,并回答说公共(public)方法可以使用异步TestMethod进行测试。仅当我要测试的方法是公共(public)方法时,此方案才有效。问题是我想测试我的DelegateCommand,因为这是我想在其他类上公开的唯一公开细节,其他所有内容都是私有(private

c# - 强制调用一次异步方法

假设我有一个类需要使用InitializeAsync()方法执行一些异步初始化。我想确保只执行一次初始化。如果另一个线程在初始化过程中调用此方法,它将“等待”直到第一个调用返回。我正在考虑以下实现(使用SemaphoreSlim)。有更好/更简单的方法吗?publicclassMyService:IMyService{privatereadonlySemaphoreSlimmSemaphore=newSemaphoreSlim(1,1);privateboolmIsInitialized;publicasyncTaskInitializeAsync(){if(!mIsInitializ

c# - MVC Controller 的操作中的异步/等待

我在ASP.netMVCController中有一个Index操作。此操作调用(除其他事项外)对具有大量行的SQL表进行计数的私有(private)操作。返回的数字将插入到View包属性中。publicActionResultIndex(){//dothingsViewBag.NumberOfRows=NumberOfRows();returnView();}privatestringNumberOfRows(){//sqlconnectionandrowcountreturnnumberOfRows;}这行得通,但在执行所有内容之前我看不到索引页面,甚至是行数。相反,我会立即完成In

c# - C# 中类型安全的即发即弃异步委托(delegate)调用

我最近发现自己需要一种类型安全的“即发即弃”机制来异步运行代码。理想情况下,我想做的是:varmyAction=(Action)(()=>Console.WriteLine("yadayada"));myAction.FireAndForget();//asyncinvocation不幸的是,调用BeginInvoke()的明显选择没有相应的EndInvoke()不起作用-它会导致缓慢的资源泄漏(因为异步状态由运行时保持并且从未释放......它期待最终调用EndInvoke()。我也无法在.NET线程上运行代码池,因为它可能需要很长时间才能完成(建议只在线程池上运行相对较短生命周期的

c# - 异步/等待和缓存

我的服务层正在将大量Db请求缓存到memcached,这是否导致无法使用Async/Await??例如,我怎么能等待这个?publicvirtualStoreGetStoreByUsername(stringusername){return_cacheManager.Get(string.Format("Cache_Key_{0}",username),()=>{return_storeRepository.GetSingle(x=>x.UserName==username);});}注意:如果缓存中存在键,它将返回一个“Store”(不是Task),如果缓存中不存在键,它将执行lam