小编Ayb*_*ybe的帖子

如果在C++或C++/CLI下以编程方式查找

我希望我的C++/CLI标头即使在另一个平台下也能编译.当然我不期望编译它们但只是忽略它们.

这是否合适?(_MSC_VER)

#ifdef _MSC_VER

    using namespace System;

        namespace ENMFP {

            public ref struct Data {
            };
        }

#endif
Run Code Online (Sandbox Code Playgroud)

谢谢 !

compilation c++-cli

15
推荐指数
1
解决办法
2597
查看次数

什么是传递参考?

在Resharper中有一个Architecture View窗口,其中有一个传递引用的术语,但它有点令人困惑,因为它的真正含义.他们的博客文章以不完整的方式介绍了它.

我开始认为这个选项仅用于简化解决方案图,这是正确的吗?

如果没有,你能解释一下传递性参考意味着什么吗?

architecture resharper reference

12
推荐指数
1
解决办法
1933
查看次数

为什么 C# 12 主构造函数以相反的顺序执行?

为什么C# 12 中的主构造函数以相反的顺序执行?

\n

至少可以说这是一个突破性的改变......

\n

例子:

\n
namespace Whatever;\n\n[TestClass]\npublic class UnitTestTemp\n{\n    [TestMethod]\n    public void TestMethod1() // PASS // is expected, 1st is 1, 2nd is 2\n    {\n        using var stream = new MemoryStream(new byte[] { 1, 2, 3, 4 });\n\n        var classicDerived = new ClassicDerived(stream);\n\n        Console.WriteLine(classicDerived.Value1);\n        Console.WriteLine(classicDerived.Value2);\n\n        Assert.AreEqual(1, classicDerived.Value1);\n        Assert.AreEqual(2, classicDerived.Value2);\n    }\n\n    [TestMethod]\n    public void TestMethod2() // FAIL // is opposite, 1st is 2, 2nd is 1\n    {\n        using var stream = new MemoryStream(new byte[] { …
Run Code Online (Sandbox Code Playgroud)

c# constructor primary-constructor .net-8.0 c#-12.0

12
推荐指数
2
解决办法
465
查看次数

异步并行下载文件

编辑

我已经改变了问题的标题,以反映我的问题,但也回答了如何轻松实现这一目标.


我试图使第二种方法返回Task<TResult>而不是Task在第一种方法中,但是由于尝试修复它,我得到了一连串的错误.

  • return之前加了await body(partition.Current);
  • 反过来它要求我在下面添加一个return语句,所以我在return null下面添加了
  • 但是现在select语句抱怨它无法从查询中推断出类型参数
  • 我换Task.RunTask.Run<TResult>,但没有成功.

我该如何解决?

第一种方法来自http://blogs.msdn.com/b/pfxteam/archive/2012/03/05/10278165.aspx,第二种方法是我正在尝试创建的重载.

public static class Extensions
{
    public static Task ForEachAsync<T>(this IEnumerable<T> source, int dop, Func<T, Task> body)
    {
        return Task.WhenAll(
            from partition in Partitioner.Create(source).GetPartitions(dop)
            select Task.Run(async delegate
            {
                using (partition)
                    while (partition.MoveNext())
                        await body(partition.Current);
            }));
    }

    public static Task ForEachAsync<T, TResult>(this IEnumerable<T> source, int dop, Func<T, Task<TResult>> body)
    {
        return Task.WhenAll(
            from partition in Partitioner.Create(source).GetPartitions(dop) …
Run Code Online (Sandbox Code Playgroud)

c# foreach task async-await

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

哪些变量如$(MKDIR)和$(COPY_DIR)定义了?

我试图抓住这些变量包含的值,但我在网上找不到任何关于它们的信息,并在C:\ Qt文件夹中搜索这些字符串.

这些变量在哪里定义?

qmake qt-creator

11
推荐指数
2
解决办法
7480
查看次数

Lock 和 SemaphoreSlim 使用 async/await 的区别

当使用 async/await 关键字访问 C# 中的临界区时,通常不建议使用lock关键字或Monitor (为什么我不能在 lock 语句的主体中使用 'await' 运算符?),因为它会在这种情况下引入死锁其中锁定关键部分的线程可能不可用。

一般方法是使用SemaphoreSlim类。

我的问题是,既然SemaphoreSlim(1,1)和 lock 在功能上是相同的,为什么使用一个可以,但另一个会引入死锁?

是因为 SemaphoreSlim 可以从任何线程释放,而锁则由锁定它的线程独占“拥有”吗?

c# multithreading locking async-await

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

SetProcessDpiAwareness没有效果

我一直在尝试在ClickOnce应用程序上禁用DPI感知.
我很快发现,无法在清单中指定它,因为ClickOnce不支持清单文件中的asm.v3.

我找到的下一个选项是调用新的Windows函数SetProcessDpiAwareness.

根据教程,

在创建应用程序窗口之前调用SetProcessDpiAwareness.

教程中,

您必须在任何Win32API调用之前调用SetProcessDpiAwareness

你必须尽早调用这个函数.所以,为了测试,我创建了一个完全空白的WPF应用程序,并将其作为我的整个App类:

[DllImport("SHCore.dll", SetLastError = true)]
private static extern bool SetProcessDpiAwareness(PROCESS_DPI_AWARENESS awareness);

[DllImport("SHCore.dll", SetLastError = true)]
private static extern void GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS awareness);

private enum PROCESS_DPI_AWARENESS
{
    Process_DPI_Unaware = 0,
    Process_System_DPI_Aware = 1,
    Process_Per_Monitor_DPI_Aware = 2
}

static App()
{
    var result = SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.Process_DPI_Unaware);
    var setDpiError = Marshal.GetLastWin32Error();
    MessageBox.Show("Dpi set: " + result.ToString());

    PROCESS_DPI_AWARENESS awareness;
    GetProcessDpiAwareness(Process.GetCurrentProcess().Handle, out awareness);
    var getDpiError = Marshal.GetLastWin32Error();
    MessageBox.Show(awareness.ToString());

    MessageBox.Show("Set DPI error: …
Run Code Online (Sandbox Code Playgroud)

c# wpf clickonce pinvoke dpi

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

基类实现INotifyPropertyChanged:派生类型可以使用其PropertyChanged事件吗?

编辑

从海报提示,我在MSDN上找到了以下有用的链接:

如何:在派生类中引发基类事件(C#编程指南)

派生类不能引发基类事件


在重构的过程中,我遇到了一个有趣的问题,到目前为止我还没有找到答案:

重构包括创建实现的abstract基类INotifyPropertyChanged,派生类型将使用它而不是自己实现接口.

派生类型可以使用基类事件,PropertyChanged还是必须覆盖它,如下所示?

如果他们必须override,你可以解释为什么它应该这样的原因?

(注意:Resharper建议重构)

public abstract class BaseDTO : INotifyPropertyChanged
{
    public virtual event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

public class ReviewDTO : BaseDTO
{
    private ImageSource _image;
    private string _summary;
    private string _url;

    public string Url
    {
        get { return _url; }
        set
        {
            if (value …
Run Code Online (Sandbox Code Playgroud)

c# refactoring inotifypropertychanged

8
推荐指数
1
解决办法
8983
查看次数

Marshal包含可变长度数组的C结构

我想将一个带有可变长度数组的C结构编组回C#,但到目前为止,我无法获得比指向结构表示和浮点指针更好的结果.

未管理的代表:

typedef float        smpl_t;

typedef struct {
  uint_t length;  /**< length of buffer */
  smpl_t *data;   /**< data vector of length ::fvec_t.length */
} fvec_t;
Run Code Online (Sandbox Code Playgroud)

管理代表:

[StructLayout(LayoutKind.Sequential)]
public unsafe struct fvec_t1
{
    public uint length;

    public float* data;
}

[DllImport("libaubio-4.dll", EntryPoint = "new_fvec", PreserveSig = true, CharSet = CharSet.Ansi,
    CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe fvec_t1* new_fvec1(uint length);
Run Code Online (Sandbox Code Playgroud)

我想是有一个.NET风格数组,其中datafloat[],但如果我做的结构改变为下面我得到的形式不能取的地址,获取的大小,或宣布一个指向托管类型 的上面的外部功能.

[StructLayout(LayoutKind.Sequential)]
public unsafe struct fvec_t1
{
    public uint length;

    public float[] data;
} …
Run Code Online (Sandbox Code Playgroud)

c c# arrays struct marshalling

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

有没有办法自动占用WrapPanel中的空白区域?

WrapPanel的子项按顺序填充,如附加的屏幕截图.

因此,根据每个孩子的长度,面板会留出很长的空白.

如何利用空白区重新安排孩子们?

到目前为止,似乎只有少数人使用WrapPanel而且没有足够的例子.

这有什么自动方式吗?或者我只需要制作自己的算法?

WrapPanel在显示事物方面起着非常重要的作用,但显示空间有限.

谢谢 !

在此输入图像描述

c# wpf children space wrappanel

8
推荐指数
1
解决办法
355
查看次数