Tag: C#的

使用MVVM在WPF中创build新窗口的最佳方法

在邻居post中: ViewModel应该如何closures表单? 我已经发布了我的愿景如何closures使用MVVM的窗口。 现在我有一个问题:如何打开它们。 我有一个主窗口(主视图)。 如果用户点击“显示”button,则会显示“演示”窗口(模式对话框)。 什么是使用MVVM模式创build和打开窗口的最佳方式? 我看到两个一般的方法: 第一个(可能是最简单的)。 事件处理程序“ShowButton_Click”应该在主窗口后面的代码中以如下方式实现: private void ModifyButton_Click(object sender, RoutedEventArgs e) { ShowWindow wnd = new ShowWindow(anyKindOfData); bool? res = wnd.ShowDialog(); if (res != null && res.Value) { // … store changes if neecssary } } 如果我们“显示”button状态应该改变(启用/禁用),我们将需要添加将pipe理button状态的逻辑; 源代码非常类似于“旧式”的WinForms和MFC源代码 – 我不确定这是好还是坏,请告知。 还有什么我错过了? 另一种方法: 在MainWindowViewModel中,我们将实现“ShowCommand”属性,它将返回命令的ICommand接口。 Comman反过来: 会提高“ShowDialogEvent”; 将pipe理button状态。 这种方法将更适合于MVVM,但将需要额外的编码:ViewModel类不能“显示对话框”,所以MainWindowViewModel将只会引发“ShowDialogEvent”,我们需要在MainWindowView的MainWindowView方法中添加事件处理程序,就像这样: ((MainWindowViewModel)DataContext).ShowDialogEvent += ShowDialog; […]

如何在Linux,x86,arm,GCC和icc上执行primefaces操作?

每一个现代操作系统都提供了一些primefaces操作 Windows有Interlocked* API FreeBSD有<machine/atomic.h> Solaris有<atomic.h> Mac OS X有<libkern/OSAtomic.h> 任何这样的Linux? 我需要它在大多数Linux支持的平台上工作,包括:x86,x86_64和arm 。 我需要它在至lessGCC和英特尔编译器上工作。 我不需要像glib或qt那样使用第三个库文件。 我需要它在C ++中工作(C不需要) 问题: 所有平台(ARM)均不支持GCCprimefaces内置__sync_* ,英特尔编译器不支持。 AFAIK <asm/atomic.h>不应该在用户空间中使用,我没有成功地使用它。 另外,我不确定它是否会与英特尔编译器一起工作。 有什么build议么? 我知道有很多相关的问题,但其中一些指向__sync* ,这对我来说是不可行的(ARM),有些则指向asm/atomic.h 。 也许有一个内联汇编库为GCC做这个(ICC支持gcc汇编)? 编辑: 有一个非常局部的解决scheme,只允许添加操作(允许实现primefaces计数器但不locking需要CAS的自由结构): 如果使用libstc++ (Intel编译器使用libstdc++ ),则可以使用在<ext/atomicity.h>或<bits/atomicity.h>中定义的__gnu_cxx::__exchange_and_add 。 取决于编译器版本。 不过,我仍然希望看到支持CAS的东西。

为什么unique_ptr将deleter作为types参数,而shared_ptr则没有?

std::unique_ptr模板有两个参数:指针的types和删除器的types。 这第二个参数有一个默认值,所以你通常只是写一些像std::unique_ptr<int> 。 std::shared_ptr模板只有一个参数:指针的types。 但是,即使删除types不在类模板中,也可以使用此自定义删除程序。 通常的实现使用types擦除技术来做到这一点。 是否有同样的想法没有用于std::unique_ptr ?

什么是最好的OAuth2 C#库?

似乎许多应用程序提供商正在使用OAuth2来允许访问API,例如Twitter和Facebook。 有没有人使用一个良好的库进行OAuth2处理,通用性足以在所有应用程序中使用?

WChars,编码,标准和可移植性

以下可能不符合SO的问题; 如果出界,请随时告诉我走开。 这里的问题基本上是,“我是否正确理解C标准,这是正确的方式去做事情? 我想要澄清,确认和更正我对C中字符处理(以及C ++和C ++ 0x)的理解。 首先,一个重要的观察: 可移植性和序列化是正交的概念。 便携式的东西是像C, unsigned int , wchar_t 。 可串行化的东西是像uint32_t或UTF-8的东西。 “便携式”意味着您可以重新编译相同的源代码,并在每个支持的平台上获得工作结果,但二进制表示可能完全不同(甚至不存在,例如,TCP-over-carrier鸽子)。 另一方面,可序列化的东西总是具有相同的表示forms,例如我可以在Windows桌面,手机或牙刷上读取的PNG文件。 便携式的东西是内部的,可序列化的东西处理I / O。 便携式的东西是types安全的,可序列化的东西需要types的双关语。 </前导> 在C中的字符处理中,有两组事物分别涉及到可移植性和序列化: wchar_t , setlocale() , mbsrtowcs() / wcsrtombs() : C标准没有提到“编码” 。 实际上,对任何文本或编码属性都是完全不可知的。 它只是说“你的入口点是main(int, char**) ;你得到一个typeswchar_t ,它可以容纳你所有系统的字符;你可以读取input的字符序列并使它们变成可用的string,反之亦然。 iconv()和UTF-8,16,32:一个函数/库在定义明确的固定编码之间进行转码。 所有由iconv处理的编码都被普遍理解和同意,只有一个例外。 C的可移植的,编码不可知的世界与其wchar_t可移植字符types和确定性外部世界之间的桥梁是WCHAR-T和UTF之间的iconv转换 。 所以,我应该总是将我的string内部存储在一个编码无关的wstring中,通过wcsrtombs()与CRT连接,并使用iconv()进行序列化? 概念: my program <– wcstombs — /==============\ — iconv(UTF8, WCHAR_T) –> […]

C#ASP.NET MVC返回上一页

在我的控制器中有一个基本的Edit方法,当编辑成功时,它redirect回顶层列表(“Index”)。 MVC脚手架之后的标准行为。 我试图改变这个编辑方法redirect回到上一页(而不是索引)。 由于我的编辑方法没有使用默认的映射input参数“id”,我第一次尝试使用它来传递前一个URL。 在我的Edit“get”方法中,我使用这一行来获取前一个URL,它工作正常: ViewBag.ReturnUrl = Request.UrlReferrer; 然后,我通过使用我的表单标签,如下所示发送此返回的URL到编辑“后”方法: @using (Html.BeginForm(new { id = ViewBag.ReturnUrl })) 现在轮子掉下来了。 我无法正确地得到从id参数parsing的URL。 *** 更新:已解决 ** * 使用Garry的示例作为指导,我将参数从“id”更改为“returnUrl”,并使用隐藏字段来传递我的参数(而不是表单标签)。 获得的经验:只有使用“id”参数才能使用它,并保持简单。 它现在有效。 这里是我更新的代码与笔记: 首先,我像第一次那样使用Request.UrlReferrer获取前一个URL。 // // GET: /Question/Edit/5 public ActionResult Edit(int id) { Question question = db.Questions.Find(id); ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId); ViewBag.Answers = db.Questions .AsEnumerable() .Select(d => new SelectListItem […]

C ++ 11 thread_localvariables在GCC 4.8中的性能损失是多less?

从GCC 4.8草案变更日志 : G ++现在实现了C ++ 11的 thread_local关键字; 这与GNU __thread关键字的区别主要在于它允许dynamic初始化和销毁​​语义。 不幸的是,即使不需要dynamic初始化,对于非函数本地thread_localvariables的引用,这种支持也需要运行时间的惩罚,因此用户可能希望继续使用具有静态初始化语义的TLSvariables的__thread 。 这个运行时间惩罚的性质和起源究竟是什么? 显然,为了支持非函数本地的thread_localvariables,需要在进入每个线程main之前进行一个线程初始化阶段(就像全局variables有一个静态的初始化阶段一样),但是它们是否指向一些运行时间惩罚那? 粗略地说,gcc的thread_local的新实现的体系结构是什么?

为什么unique_ptr只有在shared_ptr只有一个参数的时候才需要两个模板参数呢?

unique_ptr和shared_ptr接受一个自定义析构函数来调用它们自己拥有的对象。 但是在unique_ptr的情况下,析构函数作为类的模板parameter passing,而shared_ptr的自定义析构函数的types被指定为构造函数的模板参数。 template <class T, class D = default_delete<T>> class unique_ptr { unique_ptr(T*, D&); //simplified … }; 和 template<class T> class shared_ptr { template<typename D> shared_ptr(T*, D); //simplified … }; 我看不出为什么这样的区别。 什么要求?

如何将C结构来回传递给JNI中的Java代码?

我有一些C函数,我通过JNI调用一个指向结构的指针,还有一些函数会分配/释放一个指向相同types结构的指针,以便处理我的包装器。 令人惊讶的是,JNI文档对如何处理C结构几乎没有提及。 我的C头文件看起来像这样: typedef struct _MyStruct { float member; } MyStruct; MyStruct* createNewMyStruct(); void processData(int *data, int numObjects, MyStruct *arguments); 相应的JNI C包装文件包含: JNIEXPORT jobject JNICALL Java_com_myorg_MyJavaClass_createNewMyStruct(JNIEnv *env, jobject this) { return createNewMyStruct(); } JNIEXPORT void JNICALL Java_com_myorg_MyJavaClass_processData(JNIEnv *env, jobject this, jintArray data, jint numObjects, jobject arguments) { int *actualData = (*env)->GetIntArrayElements(env, data, NULL); processData(actualData, numObjects, […]

C ++不会告诉你dynamic数组的大小。 但为什么?

我知道在C ++中没有办法获得dynamic创build的数组的大小,例如: int* a; a = new int[n]; 我想知道的是:为什么? 在C ++的规范中,人们是否忘记了这一点,还是有技术上的原因呢? 信息是否存储在某个地方? 毕竟,这个命令 delete[] a; 似乎知道它要释放多less内存,所以在我看来, delete[]有一些方法知道a 。