小编Rah*_*han的帖子

在运行时创建一个类

是否可以在运行时创建一个类并使用它?

我不是指在运行时编译代码,生成新程序集,加载它,执行它等等.反射是一个单行道,因为它可以为您提供有关当前加载的程序集的运行时信息或者你从文件或内存加载.

我的问题更多的是关于注射的问题.您可以在自己的应用程序域中的运行时创建一个类,并使它做任何有用的事情吗?

.net c# reflection runtime

5
推荐指数
2
解决办法
4979
查看次数

从Entity Framework 4.1 Code First中的NotMapped类派生实体类

我需要从不属于模型的基类派生我的两个Entity类.

[NotMapped]
public abstract class BaseClass
{
    [NotMapped]
    public string SomeProperty { get; set; }
}
public partial class Derived1: BaseClass {}
public partial class Derived2: BaseClass {}
Run Code Online (Sandbox Code Playgroud)

我已经尝试将基类及其所有属性标记为[NotMapped]但是上下文初始化器抛出一个错误,指出我的派生实体类都没有映射.

.net c# entity-framework ef-code-first

5
推荐指数
1
解决办法
1617
查看次数

创建仅限管理员可访问的目录

我有一个以提升权限运行的管理员应用程序,我需要它将一些敏感文件存储在只有系统管理员才能访问的目录中.

它可能与以下调用有关,但我不确定如何配置它.

Directory.CreateDirectory(@"C:\SomePath", new AccessControl.DirectorySecurity() { AccessRightType = ?, AccessRuleType = ?, AuditRuleType = ?);
Run Code Online (Sandbox Code Playgroud)

如果有更好的方法来实现同样的目的,请告诉我.谢谢.

编辑:在这里找到了一个很好的实现.如果有任何其他建议,请将问题保持开放一天.

.net c# security directory file

5
推荐指数
1
解决办法
1734
查看次数

正 System.Double 值的快速地板和天花板替代方案

double d = 0; // random decimal value with it's integral part within the range of Int32 and always positive.
int floored = (int) Math.Floor(d); // Less than or equal to.
int ceiled  = (int) Math.Ceiling(d); // Greater than or equal to.
int lessThan = ? // Less than.
int moreThan = ? // Greater than.
Run Code Online (Sandbox Code Playgroud)

地板和天花板函数包括分别小于/大于或等于 的最大/最小整数d。我想找出分别小于/大于但不等于 的最大/最小整数d

当然,这可以通过一些if's and but's方法来实现,但我正在寻找一种不包括分支或至少非常快的方法,因为此操作将在算法中执行数十亿次。

二进制操作可能吗?如果没有,最好的选择是什么?

显而易见的解决方案是这样的:

int lessThan = (d - floored) > double.Epsilon …
Run Code Online (Sandbox Code Playgroud)

.net c# double floor ceil

5
推荐指数
1
解决办法
5791
查看次数

将解决方案更改为x64后,编译器指令#if不再识别DEBUG

我正在使用Visual Studio 2010 C#.

除了更改所有项目的构建属性之外,我最近使用配置管理器更改了x64解决方案中的所有项目.从那以后,该#if (DEBUG)指令不起作用,好像DEBUG常数消失了.

#if (DEBUG)
    // This code does not execute even in debug mode!
#endif
Run Code Online (Sandbox Code Playgroud)

我还注意到,而不是通常bin\Debugbin\Release文件夹,现在项目编译成bin\x64\Debugbin\x64\Release.

我搜索了一下,但大多数相关结果都包含如何配置,x64如果它默认情况下不显示.

c# visual-studio-2010 c-preprocessor

5
推荐指数
1
解决办法
1791
查看次数

在WinForms线程上使用CoInitializeEx

我正在为DSLR相机制作SDK,其中包含以下说明:

开发Windows应用程序的注意事项创建在Windows下运行的应用程序时,每个线程都需要进行COM初始化,以便从主线程以外的线程访问摄像机.要创建用户线程并从该线程访问摄像机,请确保在线程的开头执行CoInitializeEx(NULL,COINIT_APARTMENTTHREADED),最后执行CoUnInitialize().示例代码如下所示.从另一个线程控制EdsVolumeRef或EdsDirectoryItemRef对象时,这是相同的,而不仅仅是EdsCameraRef.

void TakePicture(EdsCameraRef camera)
{
    // Executed by another thread
    HANDLE hThread = (HANDLE)_beginthread(threadProc, 0, camera);
    // Block until finished
    ::WaitForSingleObject( hThread, INFINITE );
}

void threadProc(void* lParam)
{
    EdsCameraRef camera = (EdsCameraRef)lParam;
    CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
    EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
    CoUninitialize();
    _endthread();
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序是一个C#WinForms应用程序,通常,我使用托管线程类和Control.Invoke函数来避免跨线程问题.

由于我没有使用C#中的示例源代码来使用SDK,我的问题是,CoInitializeEx在标记有[STAThread]属性的应用程序中使用它是否有用和/或必要?

我没有遇到过一个场景,我需要让我的应用程序为线程创建一个新的公寓,这样一些洞察力将有助于更好地理解线程模型.

更新:在阅读了更多关于公寓和COM之后,它开始有所了解.现在我想知道.NET托管线程类默认是什么,我们可以以托管的方式为每个线程指定一个没有P/Invoke的公寓模型吗?

.net c# com multithreading apartments

5
推荐指数
1
解决办法
2540
查看次数

全屏Windows窗体超出了屏幕尺寸

我有一个WinForms应用程序(.NET 4),需要全屏显示或最大化显示而没有边框。

Form_Shown事件中使用以下代码:

#if (DEBUG)
    var debug = true;
#else
    var debug = false;
#endif

this.Text = "";
this.ControlBox = false;
this.ShowInTaskbar = true;
//this.TopMost = debug;
this.TopLevel = true;
this.FormBorderStyle = FormBorderStyle.None;

if (debug) { this.Bounds = Screen.FromControl(this).WorkingArea; }
else { this.WindowState = FormWindowState.Maximized; }
Run Code Online (Sandbox Code Playgroud)

如果您仔细查看下面的屏幕截图,顶部和底部区域将被剪切几个像素。同样,如果最大化,该窗口仍不会覆盖任务栏。

请注意,我仅连接了一台显示器。没有辅助显示。

关于如何解决上述两个问题的任何建议将不胜感激。

最大化模式下的应用屏幕截图

更新:上面的代码似乎适用于不带MenuStripor的表单StatusStrip

.net c# fullscreen winforms

5
推荐指数
1
解决办法
1273
查看次数

ASP .NET中的重复任务

我在共享环境中的GoDaddy上运行了一个ASP .NET网站.该应用程序是一种基于订阅的服务,具有向用户重复计费的选项.

每小时,我们都需要将用户数据与我们的支付处理器同步,以更新已升级或取消其帐户的用户.支付处理器没有用于调用URL或以其他方式通知我们更改的机制.

问题:我们需要创建一个后台线程,以预定义的间隔运行一些代码.在.NET中有一些关于后台任务的好文章,但我相信,这可能有一个更简单的方法.也许是可以调用函数等的应用程序范围的计时器.

限制:共享环境不允许Windows服务,外部应用程序,完全信任等.

由于这是一个生产应用程序,我想尽可能使用最安全的方法,而不是绞尽脑汁的IIS.

asp.net iis background recurring task

4
推荐指数
1
解决办法
2353
查看次数

控制台应用程序在鼠标单击时冻结

我有一个非常简单的C#控制台应用程序,它显示一些文本和循环等待输入,直到按下转义键或提供超时时间.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;

namespace SampleApp
{
    public static class Program
    {
        public static void Main (string [] args)
        {
            var key = new ConsoleKeyInfo();
            var watch = Stopwatch.StartNew();
            var timeout = TimeSpan.FromSeconds(5);

            Console.WriteLine("Press escape to return to the previous screen...");
            Console.WriteLine();

            do
            {
                Console.WriteLine("This screen will automatically close in " + ((timeout + TimeSpan.FromSeconds(1)) - watch.Elapsed).ToString(@"hh\:mm\:ss") + ".");

                if (Console.KeyAvailable) { key = Console.ReadKey(true); }
                else { Thread.Sleep(TimeSpan.FromSeconds(0.10D)); }
            } …
Run Code Online (Sandbox Code Playgroud)

.net c# console console-application mouseevent

4
推荐指数
1
解决办法
2248
查看次数

隐藏.net中反射的私有字段

我有一个类在整个磁盘卷上执行一些敏感的I/O操作.敏感我的意思是如果操作出错,它可能会破坏目标卷.

在一些发布后的测试中,我发现使用反射操作私有字段可能会损坏进程.该类不是sealed设计使得图书馆的消费者可以创建衍生品.

有没有办法保护私人成员阻止通过反射进行修改(来自派生或消费者代码)?

更新:我发现从评论汉斯帕桑特一个老问题[ReflectionPermission].现在调查一下.

.net c# reflection private private-members

4
推荐指数
1
解决办法
897
查看次数