小编Wil*_*ins的帖子

C#GUI命名约定的最佳实践?

GUI,无论是用WinForms还是XAML编写,似乎在我看到的项目之间具有最广泛的命名约定.对于一个TextBox人的名字的简单,我已经看到了各种命名约定:

TextBox tbName      // Hungarian notation
TextBox txtName     // Alternative Hungarian
TextBox NameTextBox // Not even camelCase
TextBox nameTextBox // Field after field with TextBox on the end
TextBox TextBoxName // Suggested in an answer...
TextBox textBoxName // Suggested in an answer...
TextBox uxName      // Suggested in an answer...
TextBox name        // Deceptive since you need name.Text to get the real value
TextBox textBox1    // Default name, as bad as you can get
Run Code Online (Sandbox Code Playgroud)

我通常会遵守所有.cs文件的StyleCop规则,并且看到其他人也这样做,但GUI往往会违反这些规则或变化很大.我没有看到任何专门引用GUI元素的Microsoft指南,而不仅仅是普通变量,甚至是在控制台应用程序之外应用的示例.

在GUI中命名元素的最佳实践是什么?

c# user-interface naming-conventions winforms

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

允许在调用stopForeground后取消通知(false)

我有一个Media服务,它使用startForeground()在播放开始时显示通知.播放时有暂停/停止按钮,暂停时有播放/停止按钮.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
// setup...

Notification n = mBuilder.build();

if (state == State.Playing) {
    startForeground(mId, n);
}
else {
    stopForeground(false);
    mNotificationManager.notify(mId, n);        
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是当我显示/更新处于暂停状态的通知时,应该允许您将其删除.mBuilder.setOngoing(false)似乎没有效果,因为之前startForeground覆盖它.

stopForeground(true);使用相同的代码调用按预期工作,但通知在销毁和重新创建时闪烁.有没有办法"更新"从startForeground创建的通知,以允许在调用stop后删除它?

编辑:根据要求,这是创建通知的完整代码.只要播放或暂停服务,就会调用createNotification.

private void createNotification() {
    NotificationCompat.Builder mBuilder = 
            new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentTitle("No Agenda")
    .setContentText("Live stream");

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
    {
        if (state == State.Playing) {
            Intent pauseIntent = new Intent(this, MusicService.class);
            pauseIntent.setAction(ACTION_PAUSE);
            PendingIntent pausePendingIntent =     PendingIntent.getService(MusicService.this, 0, pauseIntent, 0);              

            mBuilder.addAction(R.drawable.pause, "Pause", pausePendingIntent);
            //mBuilder.setOngoing(true);
        }
        else if …
Run Code Online (Sandbox Code Playgroud)

android android-service android-notifications android-notification-bar

17
推荐指数
2
解决办法
8507
查看次数

在什么情况下从必要的事件中分离?

我不确定我是否完全清楚附加对象中事件的含义.

这是我目前的理解,正确或精细:

1.不需要分离附加到本地类事件

例子:

this.Closing += new System.ComponentModel.CancelEventHandler(MainWindow_Closing);

public event EventHandler OnMyCustomEvent = delegate { };

我假设当你的对象被处理或垃圾收集时,这些函数被释放并自动从事件中分离出来.

2.附加到不再需要的对象(= null;)必须从中分离

示例:附加到计时器的Elapsed事件,您只响应一次.我假设您需要将Timer存储在本地变量中,以便在事件触发后分离Elapsed事件.因此,在本地方法范围内声明计时器会导致泄漏:

System.Timers.Timer myDataTimer = new System.Timers.Timer(1000); myDataTimer.Elapsed += new System.Timers.ElapsedEventHandler(myDataTimer_Elapsed);

3.将本地对象中的事件附加到您的班级不需要处理?

例如,如果您有一个ObservableCollection,您可以创建,监视并让它死掉.如果使用本地私有函数附加到CollectionChanged事件,当您的类被垃圾收集时,此函数是否会解除分配,导致ObservableCollection也被释放?

我确定我已经停止使用对象并且无法从事件中分离的位置(例如,我制作的计时器示例),因此我正在寻找有关其工作原理的更清晰的解释.

.net c# events event-handling

16
推荐指数
1
解决办法
3713
查看次数

如何在没有大内存分配的情况下显示快速更新的图像?

我在超声波机器上有一个WPF应用程序,它以超过每秒30帧的速度显示用C++生成的超声图像.

据我所知,在WPF中显示图像的正常过程是为您的图像创建一个BitmapSource,并为您的图像设置Source,然后使其无效并显示.

由于BitmapSources没有实现IDisposable,使用这种方法迫使我每秒创建30个BitmapSources.对于具有32bppArgb格式的640x480图像,这是每秒分配大约30MB /秒的内存,然后每10秒进行一次垃圾处理,导致可见的延迟.显然不是一个可以接受的解决方案.

我目前的解决方案是:

在C++中:我在托管C++中创建一个System.Drawing.Bitmap(WinForms位图),从指针填充图片做一个memcpy,使用Graphics对象做我需要的一些额外的绘图,并将其传递给C#/ WPF在ImageReceived事件期间.

在C#中, Image.Source被设置为BitmapBuffer生成的源,这是一种访问位图源的原始数据的黑客方式:请参阅此链接.我做了一个CopyMemory的P/Invoke来将数据从Bitmap.Scan0复制到BitmapBuffer中.然后我使Image无效以更新屏幕,然后Dispose()Drawing.Bitmap对象释放内存.

虽然这种方法已经工作了一段时间,但它看起来非常糟糕,我发现很难相信没有其他"适当"的方法可以做到这一点,而不是通过反思.

问题:有更好的方法吗?

c# wpf managed-c++ image-processing

13
推荐指数
2
解决办法
7469
查看次数

P/Invoke和C++ Wrappers之间的性能差异

在学习P/Invoke的过程中,我问过上一个问题:

如何在涉及指针时进行P/Invoke

但是,我不太明白在C#中使用P/Invoke而不是在托管C++中创建包装器的含义.在C#中使用P/Invoke创建相同的DLL肯定会导致更清晰的接口,因为我可以在嵌入式资源上使用DLLImport,但是我自己编组的本机DLL的托管C++包装器会有更好的性能吗?

c# performance pinvoke managed-c++

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

.NET/Mono Install Base

我和一些朋友正在考虑编写一个新的FOSS项目,辩论分为使用.NET或其他东西.

所以我想知道在Linux机器上是否有针对Mono的广告安装基础?如果在Windows机器上有Mono或Microsoft .Net的已知安装基础?

谢谢.


安装基础 - 实际使用的特定类型系统的单元数量的度量.

.net mono survey

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

实施实时投票系统

我正在寻找在我的网站上实施实时投票系统.该网站提供直播,我希望能够提醒观众在施法者发起的投票中选择答案.我可以理解如何将数据存储在mySQL数据库中,以及如何处理答案.然而:

我最初如何在客户端开始投票并显示它?如果脚本每隔几秒钟在页面上运行,请检查另一页以查看是否有可供用户使用的问题?

是否有任何现有的实时轮询系统示例,例如我正在实施的内容?

html mysql ajax design-patterns polling

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

如何在涉及指针时进行P/Invoke

为了学习在C#中使用PInvoke,我有点不确定如何使用涉及简单值类型的指针处理各种情况.

我从非托管DLL导入以下两个函数:

public int USB4_Initialize(short* device);
public int USB4_GetCount(short device, short encoder, unsigned long* value);
Run Code Online (Sandbox Code Playgroud)

第一个函数使用指针作为输入,第二个函数使用指针作为输出.它们在C++中的用法相当简单:

// Pointer as an input
short device = 0; // Always using device 0.
USB4_Initialize(&device);

// Pointer as an output
unsigned long count;
USB4_GetCount(0,0,&count); // count is output
Run Code Online (Sandbox Code Playgroud)

我在C#中的第一次尝试导致以下P/Invokes:

[DllImport("USB4.dll")]
public static extern int USB4_Initialize(IntPtr deviceCount); //short*

[DllImport("USB4.dll")]
public static extern int USB4_GetCount(short deviceNumber, short encoder, IntPtr value); //ulong*
Run Code Online (Sandbox Code Playgroud)

如何在C#中使用这些函数的方式与上面的C++代码相同?有没有更好的方法来声明这些类型,也许使用MarshalAs

c# pinvoke dllimport

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

你能将XAML DrawingImage转换回SVG进行编辑吗?

一家设计公司在2年前在WPF中进行了应用程序设计,现在我们正在考虑更改其中一个图像上的文本.没有提供SVG文件,只使用了XAML代码,在设计公司工作的开发人员不再在那里工作.我知道他使用Expression Blend进行设计.

任何有关将XAML转换为SVG的可能方法的帮助都会有所帮助,甚至可以提供有关使用哪些工具生成此XAML的建议.我看到了关于将XAML转换为SVG的这个主题,但看起来这些工具只能转换最初在其工具中转换的SVG.

资源字典包含用于通过应用程序显示图像的所有DrawingImage对象.这是我们正在编辑的图像之一:

<DrawingImage x:Key="MotorControlBackground">
<DrawingImage.Drawing>
  <DrawingGroup>
    <DrawingGroup.Children>
      <GeometryDrawing Brush="#FF466280" Geometry="F1 M -1138.47,3547.06C -1128.45,3557.08 -1112.14,3557.17 -1102.23,3547.25L -1024.29,3469.32L -1118.83,3374.78L -1214.79,3470.74L -1138.47,3547.06 Z ">
        <GeometryDrawing.Pen>
          <Pen Thickness="2.5" MiterLimit="2.75" Brush="#FF212121"/>
        </GeometryDrawing.Pen>
      </GeometryDrawing>
      <GeometryDrawing Brush="#FFFFFFFF" Geometry="F1 M -1131.22,3533.84L -1138.68,3533.84L -1138.68,3532.34L -1135.91,3532.34L -1135.91,3521.89L -1138.68,3521.89L -1138.68,3520.4C -1137.64,3520.4 -1136.87,3520.25 -1136.38,3519.95C -1135.88,3519.65 -1135.6,3519.09 -1135.54,3518.26L -1133.99,3518.26L -1133.99,3532.34L -1131.22,3532.34L -1131.22,3533.84 Z "/>
      <!-- ... Heavily shortened. Expect around 100 more lines here ... -->
      <GeometryDrawing Geometry="F1 M -1175.94,3268.96L -1057.64,3475.82">
        <GeometryDrawing.Pen>
          <Pen …
Run Code Online (Sandbox Code Playgroud)

c# xaml svg

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

如何使用java解码quoted-printable

如何使用Java解码quoted-printable.我正在从服务器读取邮件并使用正则表达式从邮件中获取一些数据.我的邮件内容类型是text/html因为这个,我得到HTML标签和数据,这使我很难进行模式匹配.它示出了像一些字符=20,=cF等等.

我该如何解决这个问题?

java encoding

7
推荐指数
0
解决办法
6006
查看次数