小编Oli*_*ver的帖子

在调用C#类声明之前,方括号中的内容是什么?

什么是[something]

[something]
public class c1 {

}
Run Code Online (Sandbox Code Playgroud)

用C#调用?它有什么作用?

c#

56
推荐指数
2
解决办法
2万
查看次数

发送UDP广播,接收多条消息

我有2个程序,1个用于发送UDP广播消息,1个用于监听此广播.我的问题是,有时当我发送广播时,接收器会收到2条消息.为什么?

接收者代码:

public class Receiver {
  private readonly UdpClient udp = new UdpClient(15000);
  private void StartListening()
  {
    this.udp.BeginReceive(Receive, new object());
  }
  private void Receive(IAsyncResult ar)
  {
    IPEndPoint ip = new IPEndPoint(IPAddress.Any, 15000);
    byte[] bytes = udp.EndReceive(ar, ref ip);
    string message = Encoding.ASCII.GetString(bytes);
    StartListening();
  }
}
Run Code Online (Sandbox Code Playgroud)

发件人代码:

public class Sender {
  public void Send() {
    UdpClient client = new UdpClient();
    IPEndPoint ip = new IPEndPoint(IPAddress.Broadcast, 15000);
    byte[] bytes = Encoding.ASCII.GetBytes("Foo");
    client.Send(bytes, bytes.Length, ip);
    client.Close();
  }
}
Run Code Online (Sandbox Code Playgroud)

c# udp broadcasting

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

WPF - 全球风格?

有没有办法为我的WPF应用程序设置全局样式?

我希望做的是将样式应用于我的所有按钮,这些按钮也有一个Image子.

wpf xaml styles global

22
推荐指数
2
解决办法
3万
查看次数

比较Visual Studio中的配置?

实际上我遇到了一个问题,我更喜欢经常进入:

请考虑以下事项:您刚刚创建了一个新的解决方案/项目,并开始创建/添加您需要的所有内容.当你这样做时,你总是在调试配置中.您对配置进行了更改(在C++项目中,特别是编译器,链接器设置),并且在一天结束时,您只想交换到发布模式以进行最终构建,会发生什么?您有大量关于缺少定义,链接库,预处理器定义,预编译头等的错误消息.)

现在?打开"项目属性",在树视图中选择每个项目,然后使用左上角"配置"的组合框切换和返回.

由于这两个配置都保存在一个文件中,您不能使用简单的Diff-Tool,或者必须将项目文件中的两个部分复制并粘贴到两个不同的文件中,比较它们并将所有内容合并回来项目文件.

是否有更好的解决方案来比较一个项目中的不同配置?

configuration visual-studio

20
推荐指数
2
解决办法
5157
查看次数

如何在AssemblyResolve事件之前在运行时加载程序集?

实际上我试图在我的解决方案中实现某种"静态链接"程序集.所以我尝试了以下内容:

  • 使用CopyLocal = false添加对程序集的引用
  • 使用"添加为链接"将.dll文件本身添加到我的解决方案中
  • 使用"添加资源" - "添加现有文件"将.dll文件本身添加到我的资源
  • 将我的程序集中的某些类型添加到Form1中 private MyObject temp = new MyObject();

在这些步骤之后,我按预期得到了FileNotFoundException.因此,让我们尝试使用此快速入侵在AssemblyResolveEvent中加载程序集

AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
    {
        Assembly MyAssembly = AppDomain.CurrentDomain.Load(Properties.Resources.ExternalAssembly);
        return MyAssembly;
    };
Run Code Online (Sandbox Code Playgroud)

这样可行!我可以从AssemblyResolveEvent中的资源文件加载我的程序集.但是这个事件只会发生,如果它无法在其他任何地方找到我的组件.但是我怎么能 .Net尝试搜索不同的地方之前加载我的程序集?

由于检查先前引用的程序集的事实,我认为可以预先将程序集加载到域中,这将被采用.

我在program.cs中使用以下Main()方法尝试了这个

static void Main()
{
    LoadMyAssemblies();
    AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => LoadMyAssemblies();
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

private static Assembly LoadMyAssemblies()
{
    Assembly result = AppDomain.CurrentDomain.Load(Properties.Resources.MyStaticAssembly);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但它仍会运行到ResolveEventHandler中.更好的是,如果我再次加载程序集并查看AppDomain.CurrentDomain.GetAssemblies()我可以看到我的程序集加载了两次!!

所以任何想法为什么加载程序集在AssemblyResolve事件之前加载时不会被考虑在内?在调试器的帮助下,当调用来自AssemblyResolve时,我也返回了null,但是在这种情况下,我在开头时得到了一个FileNotFoundException.

c# assemblies .net-3.5

11
推荐指数
1
解决办法
1万
查看次数

如何在c#中避免多个windows窗体实例

如何在c#中避免多个windows窗体实例?我只想运行一个表单实例.因为有可能从我的应用程序的许多页面打开相同的表单.

c# singleton

9
推荐指数
4
解决办法
3万
查看次数

向程序发送击键

在窗口形式中,我做了一个按钮,我试图将它发送F1到特定窗口(例如FireFox,我的电脑等......)

我的问题是:

  • 我怎么用窗口的名字来做呢?(例如"Mozilla Firefox")
  • 我怎么用流程的名字来做?(例如firefox.exe)

c# keystroke sendkeys winforms

9
推荐指数
1
解决办法
1万
查看次数

在C#中返回IEnumerable实例和yield return语句之间的确切区别是什么?

目前我正在使用一些通过迭代器应用延迟执行的库.在某些情况下,我需要简单地"转发"收到的迭代器.即我必须IEnumerable<T>从被调用的方法获取实例并立即返回它.

现在我的问题是:简单地返回收到的IEnumerable<T>或通过循环重新产生它之间是否存在相关差异?

IEnumerable<int> GetByReturn()
{
    return GetIterator(); // GetIterator() returns IEnumerable<int>
}
// or:
IEnumerable<int> GetByReYielding()
{
    for(var item in GetIterator()) // GetIterator() returns IEnumerable<int>
    {
        yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# ienumerable

9
推荐指数
1
解决办法
302
查看次数

从日期时间表中获取包含起始值和结束值的列表

目前我有一个像这样建立的表

DeviceID      Timestamp            Value
----------------------------------------
Device1       1.1.2011 10:00:00    3
Device1       1.1.2011 10:00:01    4
Device1       1.1.2011 10:00:02    4
Device1       1.1.2011 10:00:04    3
Device1       1.1.2011 10:00:05    4
Device1       1.1.2011 14:23:14    8
Device1       1.1.2011 14:23:15    7
Device1       1.1.2011 14:23:17    4
Device1       1.1.2011 14:23:18    2
Run Code Online (Sandbox Code Playgroud)

如您所见,来自具有给定时间戳的设备的某些值(列类型为datetime).

问题是设备可以在任何时刻启动和停止,并且数据中没有发生启动或停止的直接信息.但是从给定时间戳的列表中可以很容易地判断出启动和停止的时间,因为每当两行的时间戳在五秒内时,它们属于相同的测量.

现在我想从这个数据中得到这样一个列表:

DeviceID      Started              Ended
Device1       1.1.2011 10:00:00    1.1.2011 10:00:05
Device1       1.1.2011 14:23:14    1.1.2011 14:23:18
Run Code Online (Sandbox Code Playgroud)

那么任何想法如何以快速的方式做到这一点?我能想到的只是使用某种光标并手动比较每个日期时间对.但我认为这将变得非常慢,因为我们必须检查每一行中的每个值.

那么有没有更好的SQL解决方案不适用于游标?

更新

目前我测试了所有给出的答案.通过阅读他们看起来都很好,并有一些有趣的方法.不幸的是,所有这些(到目前为止)在真实数据上都失败了.最大的问题似乎是数据的质量(目前它们在表中约为350万条).仅在小的子集上执行给定查询会产生预期的结果,但是将查询滚动到整个表上只会导致非常糟糕的性能.

我必须进一步测试并检查我是否可以对数据进行分块并仅将部分数据传递给其中一个给定的算法以使这个东西滚动.但也许你们中的一个人有另一个聪明的想法,可以让结果更快一些.

更新(有关结构的更多信息)

好的,这些信息也可能有所帮助:目前表中有大约350万个条目.这里是给定的列类型和indizes:

  • _ID
    • INT
    • 首要的关键
    • 分组索引
    • 在我的示例中没有提到此列,因为此查询不需要它
  • 设备编号
    • INT
    • 不是空的
    • 指数
  • 时间戳
    • 约会时间
    • 不是空的
    • 指数
    • 几个不带索引的不同类型的列(int,real,tinyint)
    • all都可以为null …

sql sql-server-2008 gaps-and-islands

9
推荐指数
1
解决办法
3054
查看次数

app.UseMigrationsEndPoint 在 .NET Core Web 应用程序启动类中的作用

我从 Visual Studio 创建了一个新的 .NET Core Web 应用程序,并在启动类中生成了这段代码:

if (env.IsDevelopment())
{
    // ***
    app.UseMigrationsEndPoint();
    // ***
}
Run Code Online (Sandbox Code Playgroud)

这条线到底是做什么的app.UseMigrationsEndPoint()官方文档根本没有帮助:

处理执行迁移操作的请求。中间件将侦听对 DefaultPath 的请求。

默认路径是什么?发布什么?它实际上会执行什么?它有任何可选参数吗?它以某种方式受到保护吗?

c# entity-framework-core asp.net-core asp.net-core-5.0

9
推荐指数
2
解决办法
1602
查看次数