我有许多类具有实现IDisposable(定时器,画笔等)的私有成员变量.我是否需要做任何事情以确保.NET Framework正确清理这些变量?
我遇到的文献是指"托管资源"与"非托管资源".这些术语让我感到困惑,因为您可以拥有一个使用非托管资源实现功能的托管类.这被认为是"非托管资源"还是"托管资源"?
我的理解是,如果您没有在实现IDisposable的对象上调用Dispose(),那么在应用程序退出之前不会释放资源.在长时间运行程序时,这种情况可能会导致OutOfMemory异常.
如何确保我的代码正确处理资源管理?这对于这些对象很重要,因为它们是自定义控件,并且可能有很多绘图消耗了IDisposable资源.我尽可能使用C#using语句,但有时我需要使一个对象实现IDisposable成员变量,而using语句对我没有帮助.
我试图阻止访问我正在编写的类的默认构造函数.我希望其他人使用的构造函数需要对另一个对象的const引用.我已将默认构造函数设为私有,以防止其他人使用它.我收到默认构造函数的编译器错误,因为const引用成员变量未正确初始化.我该怎么做才能编译?
class CFoo
{
public:
CFoo();
~CFoo();
};
class CBar
{
public:
CBar(const CFoo& foo) : fooReference(foo)
{
}
~CBar();
private:
const CFoo& fooReference;
CBar() // I am getting a compiler error because I don't know what to do with fooReference here...
{
}
};
Run Code Online (Sandbox Code Playgroud) 我已经通过NuGet从版本4.2.0更新到MvvmCross版本4.2.1,现在Android项目在启动时崩溃了.一个MvxException
闪屏与消息中被抛出:
MvvmCross.Platform.Exceptions.MvxException:在使用DownloadCache之前,必须在File插件上调用EnsureLoaded
我实际上是在MvxAppCompatSetup.InitializeLastChance
覆盖中调用此方法.对于4.2.0版本,这对我来说效果很好,但现在InitializeLastChance
运行版本4.2.1时代码甚至没有出现.
protected override void InitializeLastChance()
{
base.InitializeLastChance();
MvvmCross.Plugins.File.PluginLoader.Instance.EnsureLoaded();
MvvmCross.Plugins.DownloadCache.PluginLoader.Instance.EnsureLoaded();
}
Run Code Online (Sandbox Code Playgroud)
我无法移动EnsureLoaded
调用,InitializeFirstChance
因为我会得到一个例外,因为插件尚未初始化
无法解析类型MvvmCross.Platform.Plugins.IMvxPluginManager
该MvxSetup.InitializePluginFramework
出现的时候抛这个异常InitializePluginFramework
被调用.
NuGet显示了我在更新期间安装的每个插件的错误消息:
[失败]无法归档文件'...\Project.Droid\Bootstap\XXXBootstrap.cs'
文件肯定存在,软件包安装时不报告错误.
处理这个问题的正确方法是什么?
我有一个由C程序生成的平面文件.文件中的每条记录都包含一个固定长度的标题,后跟数据.标题包含指示以下数据大小的字段.我的最终目标是编写一个C#/ .NET程序来查询这个平面文件,所以我正在寻找使用C#读取文件的最有效方法.
我在以下代码中找不到第7行的.NET等效项.据我所知,我必须发出多次读取(使用BinaryReader为标头的每个字段一次),然后发出一次读取以获取标头后面的数据.我正在尝试学习一种在两次读取操作中解析记录的方法(一次读取以获取固定长度的头部,另一次读取以获取以下数据).
这是我试图使用C#/ .NET复制的C代码:
struct header header; /* 1-byte aligned structure (48 bytes) */
char *data;
FILE* fp = fopen("flatfile", "r");
while (!feof(fp))
{
fread(&header, 48, 1, fp);
/* Read header.length number of bytes to get the data. */
data = (char*)malloc(header.length);
fread(data, header.length, 1, fp);
/* Do stuff... */
free(data);
}
Run Code Online (Sandbox Code Playgroud)
这是标题的C结构:
struct header
{
char id[2];
char toname[12];
char fromname[12];
char routeto[6];
char routefrom[6];
char flag1;
char flag2;
char flag3;
char flag4;
char cycl[4];
unsigned short len; …
Run Code Online (Sandbox Code Playgroud) 我有一个我在MvvmCross 4.x中使用的方法,用于NotificationCompat.Builder
设置PendingIntent
一个通知,以便在用户单击通知时显示ViewModel.我正在尝试将此方法转换为使用MvvmCross 5.x,IMvxNavigationService
但无法查看如何设置演示文稿参数,并获得PendingIntent
使用新的导航API.
private PendingIntent RouteNotificationViewModelPendingIntent(int controlNumber, RouteNotificationContext notificationContext, string stopType)
{
var request = MvxViewModelRequest<RouteNotificationViewModel>.GetDefaultRequest();
request.ParameterValues = new Dictionary<string, string>
{
{ "controlNumber", controlNumber.ToString() },
{ "notificationContext", notificationContext.ToString() },
{ "stopType", stopType }
};
var translator = Mvx.Resolve<IMvxAndroidViewModelRequestTranslator>();
var intent = translator.GetIntentFor(request);
intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);
return PendingIntent.GetActivity(Application.Context,
_notificationId,
intent,
PendingIntentFlags.UpdateCurrent);
}
Run Code Online (Sandbox Code Playgroud)
当我点击该通知,但RouteNotificationViewModel确实出现Prepare
并Initialize
没有被调用.有什么必要将此方法从MvvmCross 4.x导航风格转换为MvvmCross 5.x导航风格?
我发现当使用MvvmCross版本3.5.1启用"不要保持活动"开发人员设置时,Mvvm Cross EditText绑定无法正常工作的情况.以下是重现的步骤:
实现ViewModel:
public class FirstViewModel : MvxViewModel
{
private readonly IMobileBarcodeScanner _mobileBarcodeScanner;
public FirstViewModel(IMobileBarcodeScanner mobileBarcodeScanner)
{
_mobileBarcodeScanner = mobileBarcodeScanner;
}
private string _barCode = "";
public string BarCode
{
get { return _barCode; }
set { _barCode = value; RaisePropertyChanged(() => BarCode); }
}
private MvxCommand _scanBarCodeCommand;
public IMvxCommand ScanBarCodeCommand
{
get
{
return _scanBarCodeCommand ?? (_scanBarCodeCommand = new MvxCommand(async () => await OnScanBarCode()));
}
}
private async Task OnScanBarCode()
{
var result = …
Run Code Online (Sandbox Code Playgroud)以前版本的Windows窗体的Microsoft Report Viewer技术有一个运行时文件,您可以在客户端PC上安装该文件,以在用户计算机上设置Microsoft Report Viewer程序集.Visual Studio 2017使用的Report Viewer版本14.0是否存在类似的内容?我似乎无法在互联网上找到任何可用的东西.