非委托类型的事件

我已经实现了一个看起来像这个接口的类: [ImmutableObject(true)] public interface ICustomEvent { void Invoke(object sender, EventArgs e); ICustomEvent Combine(EventHandler handler); ICustomEvent Remove(EventHandler handler); ICustomEvent Combine(ICustomEvent other); ICustomEvent Remove(ICustomEvent other); } 此CustomEvent类的工作方式与MulticastDelegate非常相似。 它可以调用。 它可以与另一个CustomEvent结合使用。 并且可以从另一个CustomEvent中删除CustomEvent。 现在,我想声明一个这样的类: class EventProvider { public event CustomEvent MyEvent; private void OnMyEvent() { var myEvent = this.MyEvent; if (myEvent != null) myEvent.Invoke(this, EventArgs.Empty); } } 不幸的是,这段代码无法编译。 出现编译器错误CS0066: ‘EventProvider.MyEvent’:事件必须是委托类型 […]

如何在dotnet核心中动态加载程序集

我正在构建一个Web应用程序,我想要单独关注,即在不同的项目中进行抽象和实现。 为了实现这一点,我尝试实现一个组合根概念,其中所有实现必须有一个ICompositionRootComposer实例来注册服务,类型等。 public interface ICompositionRootComposer { void Compose(ICompositionConfigurator configurator); } 在构建层次结构中直接引用的项目中,将调用ICompositionRootComposer实现,并在基础IoC容器中正确注册服务。 当我尝试在项目中注册服务时出现问题,我在其中设置了一个后期构建任务,将构建的dll复制到Web项目的调试文件夹: cp -R $(TargetDir)”assembly and symbol name”* $(SolutionDir)src/”webproject path”/bin/Debug/netcoreapp1.1 我正在加载程序集:(灵感: 如何在.net核心控制台应用程序中加载位于文件夹中的程序集 ) internal class AssemblyLoader : AssemblyLoadContext { private string folderPath; internal AssemblyLoader(string folderPath) { this.folderPath = Path.GetDirectoryName(folderPath); } internal Assembly Load(string filePath) { FileInfo fileInfo = new FileInfo(filePath); AssemblyName assemblyName = new AssemblyName(fileInfo.Name.Replace(fileInfo.Extension, […]

c#中的虚拟关键字

我对java有所了解,过去几天一直在学习c#。 现在我遇到了“虚拟”关键字,正如此链接所建议的那样,用于允许在子类中覆盖相应的方法,属性等。 现在我认为即使不使用“virtual”关键字也可以覆盖方法。 那为什么有必要呢?

模拟按键X秒

这是我用来在某个过程中模拟tab-keypress的代码: [DllImport(“user32.dll”)] static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam); public Form1() { PostMessage(MemoryHandler.GetMainWindowHandle(), (int)KeyCodes.WMessages.WM_KEYDOWN, (int)KeyCodes.VKeys.VK_TAB, 0); InitializeComponent(); } 有没有办法扩展它,以便按下(例如)1秒的键,而不是只是点击它? 请注意,我对阻止UI线程的Thread.Sleep()解决方案不感兴趣。

Unity DI使用PerRequestLifetimeManager注入DbContext

我有以下代码用Unity初始化实例: IUnityContainer container = new UnityContainer(); container.RegisterType(new PerRequestLifetimeManager(), new InjectionConstructor()); container.RegisterType(typeof(IGenericRepository), typeof(GenericRepository)); container.RegisterType(new PerRequestLifetimeManager()); container.RegisterTypes( AllClasses.FromAssemblies( Assembly.GetAssembly(typeof(IUserService)), Assembly.GetAssembly(typeof(UserService))), WithMappings.FromMatchingInterface, WithName.Default, WithLifetime.PerResolve); DependencyResolver.SetResolver(new Unity.Mvc4.UnityDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 我使用PerRequestLifetimeManager所以我按照MSDN上的建议,并在上面代码的末尾添加了新行: DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 但在我放置之后。 当加载页面(仅静态html)时,我向我的WebApi控制器发送ajax请求,该控制器调用抛出错误的GenericReposirory Get()方法: The operation cannot be completed because the DbContext has been disposed. 没有这行代码,一切正常,但没有设置它可能不会处置上下文。 我的UnitOfWork类: public class UnitOfWork : IUnitOfWork, IDisposable { private readonly VotingSystemContext […]

Windows窗体/ WPF太大了,我怎么能把它分开?

我即将创建WPF应用程序。 到目前为止,在uni中我们完成GUI的唯一方法是使用一个主窗口和一个代码隐藏文件来处理其按钮点击等。 我的问题是,随着应用程序的增长,GUI会增长,文件后面的代码大小可能会失控! 我已经为我的系统确定了大约15个主要用例(例如:输入详细信息,查看详细信息等…)。 我正在创建一个主窗口(大小:480×320),由15个单独的屏幕组成(每个用例一个)。 这可以通过一个居中和拉伸的TabControl来实现,它有15个TabItem。 或者更可能的是它可能只是一堆分层容器,一个在另一个之上(一次只能看到一个)。 关键是,有15个单独的屏幕,我的代码隐藏文件将变得巨大(更不用说xaml文件!):在状态之间玩杂耍 – 使14折叠/隐藏并使一个可见,处理15个不同屏幕的控件。 有没有办法拥有15个单独的表单,每个表单都有自己的代码隐藏文件,而不是一个表单上的15个TabItems,然后根据需要创建一个主引擎并将其废弃? 当然,它应该看起来好像是一种forms,而不是15种弹出窗口。 我该如何处理? 您将如何处理长达数千行的xaml和代码隐藏文件的问题?

.NET中的格雷码

在.NET框架中的任何地方都有内置的格雷码数据类型吗? 或者Gray和binary之间的转换实用程序? 我可以自己做,但如果轮子已经发明了……

.net cf在焦点上显示键盘的TextBox

我的UI上有一些文本框,我想在控件有焦点时显示移动键盘,然后消失。 注意:对于此特定程序,它是一个高屏幕,设备上没有物理键盘。

如何创建自定义集合编辑器表单以与属性网格一起使用?

我试图将属性网格控件与一个类相结合,该类具有另一个类的列表/集合作为其中一个属性。 让我们称它们为A类,列表将包含B类供参考。 我想要合并一个有两个列表框的表单。 左侧的列表框将包含我的程序中当前不在右侧列表中的所有B类的列表。 右边的列表将包含当前与A类关联的所有B类。我希望两者之间的按钮在两个列表之间移动项目。 这很容易设计,但我不确定如何设置表单以用作集合编辑器。 谁能指出我正确的方向? 而且,我如何设置一个包含可供选择的ID列表的属性的下拉列表,如果有人可以指出我的方向来完成这个。

linq .where子句的null引用exception

我试图从一个可以为null的对象数组(数组)中获取属性,并且我总是得到一个空引用exception。 如果它为null或返回空字符串,我怎么能告诉LINQ不处理它? foreach (Candidate c in candidates) { results.Add(new Person { firstName = c.firstname, //ok lastName = c.Name, //ok // contactItems is an array of ContactItem // so it can be null that’s why I get null exception // when it’s actually null phone = c.address.contactItems.Where( ci => ci.contactType == ContactType.PHONE).First().contactText } ); } 我也尝试过不要取消null。 […]