小编Mik*_*ica的帖子

C#列表定义,括号与花括号

我刚刚注意到,当你List在c#中声明一个时,你可以在最后添加括号或花括号.

List<string> myList = new List<string>();
List<string> myList2 = new List<string>{};
Run Code Online (Sandbox Code Playgroud)

这两个列表似乎都具有相同的功能.用括号或花括号声明它们是否有任何实际差异?

c# list

23
推荐指数
3
解决办法
5297
查看次数

熊猫,读取CSV忽略额外的逗号

我在Pandas数据框中读了一个包含8列的CSV文件.最后一列包含一条错误消息,其中一些包含逗号.这会导致文件读取失败并显示错误ParserError: Error tokenizing data. C error: Expected 8 fields in line 21922, saw 9

有没有办法忽略第8个字段后的所有逗号,而不是必须通过文件删除多余的逗号?

读取文件的代码:

import pandas as pd
df = pd.read_csv('C:\\somepath\\output.csv')
Run Code Online (Sandbox Code Playgroud)

有效的线:

061AE,Active,001,2017_02_24 15_18_01,00006,1,00013,some message
Run Code Online (Sandbox Code Playgroud)

失败的行:

061AE,Active,001,2017_02_24 15_18_01,00006,1,00013,longer message, with commas
Run Code Online (Sandbox Code Playgroud)

python pandas

8
推荐指数
2
解决办法
4277
查看次数

以编程方式刷新 Windows 任务栏

我有一个更改注册表值以隐藏 Windows 任务栏中不需要的图标的函数(tryOpenCreateKey 是一个函数,用于更新现有值或创建不存在的键,因为组策略可以做奇怪的事情)。

public static void changeTaskBar()
{
    string subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer";
    string setting = "EnableAutoTray";
    int setTo = 1;
    using (RegistryKey regKey = Registry.CurrentUser.OpenSubKey(subKey, true))
    {
        tryOpenCreateKey(regKey, setting, setTo, RegistryValueKind.DWord, subKey);
        SHChangeNotify(HChangeNotifyEventID.SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero); //Updates Windows Explorer with new reg changes
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在 Windows 加载时将注册表值设置为 0,则所有任务栏托盘图标都可见。正确运行此代码将其设置为 1,但要使其在视觉上生效,需要重新启动 explorer.exe。

在“通知区域图标”菜单中,有一个“始终在任务栏上显示图标和通知”选项,它会更新此注册表值并刷新 explorer.exe 的显示,而无需重新启动它。

我也希望能够以编程方式执行此操作。我有一个类似的功能,可以取消隐藏隐藏的文件和文件夹,它必须调用资源管理器的刷新才能使隐藏的项目真正变为可见。

[Flags]
private enum HChangeNotifyEventID
{
    SHCNE_ASSOCCHANGED = 0x08000000,
}

[Flags]
private enum HChangeNotifyFlags
{
    SHCNF_IDLIST = 0x0000
}

[Flags]
private enum SendMessageTimeoutFlags : uint …
Run Code Online (Sandbox Code Playgroud)

c# registry windows-7

5
推荐指数
0
解决办法
460
查看次数

当计时器线程没有按时完成时会发生什么

我正在使用System.Threading计时器来轮询不同线程上的传感器(由于通信延迟,一次一个很慢).它还允许用户通过更改计时器周期来更改轮询速率.

如果计时器在下一个时期之前没有完成,那么我无法解决的问题是什么.我写了一个测试程序,但它没有真正回答任何问题.

如果我有一个运行大约需要1.7秒并且每10秒调用一次的函数,它会在下一个启动之前完成,并且我的CPU使用率在13%(一个核心100%)和0%之间波动.

t = new Timer(doWork, null, 0, 10000);

private void doWork(object o)
{
    for(int i = 0; i < numberItts; i++)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我然后将计时器周期降低到1秒,我会期望它在前一个线程完成之前不执行线程,或者继续生成新线程,并且随着更多线程在其他完成之前启动,CPU使用率将会上升.实际发生的是CPU使用率在13%到25%之间波动.

将周期更改为500毫秒,CPU使用率将在38%和50%之间波动.当然,在这一点上,他们应该比他们结束时更快地开始.

这些线程是如何管理的?当轮询速率快于完成线程的速率时,限制创建的数量是多少?

c# multithreading timer

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

Visual Studio 2017找不到std :: variant

我正在使用Visual Studio 2017-15.9.7进行C ++开发,看起来我已经安装了必要的模块。

已安装的VC ++模块

但是下面的代码给出了错误-“命名空间” std“没有成员” variant“”

std::variant在C ++ 17中受支持,并且看起来它是在15.0中引入Visual Studio的

#include <iostream>
#include <variant>
int main()
{
    std::variant<int, double, std::string> value;
}
Run Code Online (Sandbox Code Playgroud)

好像以前有人问过同样的问题,但问题似乎已被删除。

c++ visual-studio c++17 visual-studio-2017

4
推荐指数
2
解决办法
1030
查看次数

在C#中的父类上正确实现IDisposable

我有一个实现C#的类,SerialPort它曾经是这样的:

public class AsyncSerial : IDisposable
{
    SerialPort newPort; //Parameters declared in my constructor
    //Constructor and other methods

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if(disposing)
        {
            this.Close();
            this.Dispose();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这在代码分析中不会引发任何警告(我从MSDN获取代码作为如何正确执行此操作的示例).

因为我只是要宣布一个SerialPort我认为我会让我的班级成为孩子SerialPort,但现在我得到警告,我似乎无法解决.

public class AsyncSerial : SerialPort
{
    //Constructor and other methods

    public new void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected new virtual void Dispose(bool disposing)
    {
        if(disposing)
        {
            this.Close();
            this.Dispose();
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns idisposable

3
推荐指数
1
解决办法
898
查看次数

如何使用 vb.net 更改数据表中的列数据类型

如何从 VB.NET 中的输入数据表(已填充)更改数据列的数据类型,然后我会将代码放在 Blue Prism Code Stage 中输入:

  1. 我要更改数据类型的字段(列)的名称

  2. 我要转换的数据类型

  3. 输入集合(数据表)

例子:

Dim InputDT As New DataTable
InputDT.Columns.Add(New DataColumn("test"))
dt.Columns("test").DataType = GetType(Date)
Run Code Online (Sandbox Code Playgroud)

谢谢

vb.net datatable datatables blueprism

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

在C#列表中标记位置

我有一个从字典文件中读入的字符串列表(按字母顺序排序).我想创建每个起始字母的最后一个位置的索引,所以如果有1000个以A开头的单词,它将被记录为位置999(因为数组从0开始).以B开头的1000个单词意味着B的结束位置是1999年,依此类推.这些位置值将存储在int数组中.

我能想到的唯一方法就是循环遍历整个列表,并且还有很多if语句来查看单词的第一个字母.不是最优雅的解决方案.

有没有人知道一个简单的方法来做到这一点,而不是26个if语句?

编辑:这样做的目的是生成随机单词.如果我想要以BI开头的单词将生成1000到1999之间的随机数,并从列表中的该位置获取单词.

c# list

2
推荐指数
1
解决办法
160
查看次数

在表单加载时最小化并隐藏Winform

我在C#程序中有一个Windows窗体,FormBorderStyle设置为FixedToolWindow.

窗口没有正常的控制框,但用户仍然可以从菜单中将其最小化.还有一个窗口以最小化状态启动的设置.

当用户单击最小化按钮时,它调用以下函数:

private void minimizeWindow()
{
    timer1.Enabled = false;            
    this.WindowState = FormWindowState.Minimized;
    this.Hide();
}
Run Code Online (Sandbox Code Playgroud)

窗口变成屏幕左下角的一个小框,然后消失(从this.hide通话中).当从Form_Load方法中调用相同的函数时(当设置开始最小化时),它最小化但不消失.

我的猜测是因为我在到达结尾之前隐藏了表单,Form_Load当它到达方法结束时再次显示.是否有任何方法可以确保表单在加载时隐藏(从系统托盘图标再次最大化)?

编辑:包含表单加载的所有代码

private void Form1_Load(object sender, EventArgs e)
{
    this.Left = windowXPos;
    this.Top = windowYPos;
    sysTrayIcon.MouseDoubleClick += new MouseEventHandler(sysTrayIcon_MouseDoubleClick);
    sysTrayIcon.BalloonTipText = "Timers Running";
    this.sysTrayIcon.Icon = this.Icon;
    sysTrayIcon.Visible = true;
    sysTrayIcon.ShowBalloonTip(500);
    Start();  //sets up timers
    if (startMinimized)
    {
        minimizeWindow();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# visibility winforms

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

不要嵌套类型警告(C#)

我在类中有以下代码来设置串行端口甚至处理程序.

我得到两个警告; CA1034(不要窝类型),它告诉我,使我delgate私人(这将阻止我是来设置,甚至处理在继承的类),以及CA1009(申报事件的第二个参数作为一个EventArgs,或一个实例一个扩展EventArgs的类型,名为'e'),我不明白.

我的代码如下

myPort.DataReceived += new SerialDataReceivedEventHandler(port_OnDataRecived); //Setup when port is opened

private void port_OnDataRecived(object sender, SerialDataReceivedEventArgs e)
{
        int lengthToRead = myPort.BytesToRead;
        byte[] rxBytes = new byte[lengthToRead];
        myPort.Read(rxBytes, 0, lengthToRead);
        PacketReceived(rxBytes, e);
}

public delegate void PacketReceivedEventHandler(object sender, byte[] packet);
public event PacketReceivedEventHandler OnPacketReceived;

public virtual void PacketReceived(byte[] packet, EventArgs e)
{
        if (OnPacketReceived != null)
        {
            OnPacketReceived(this, packet);                
        }
}
Run Code Online (Sandbox Code Playgroud)

我一直在查看MSDN文章和一些SO问题,但我无法将建议的修复程序与我自己的代码联系起来. 这个答案是有道理的,但转换我的代码看起来像它导致

OnPacketReceived(this, packet); 
Run Code Online (Sandbox Code Playgroud)

被替换为

handle(this, new PacketReceivedEventHandler();
Run Code Online (Sandbox Code Playgroud)

这是一个争论(void (object, byte[]) target)(这是我被困的地方).至于尝试修复CA1034警告,我甚至看不到我写的是嵌套类型,MSDN文章没有包含如何修复规则违规的示例.

c# event-handling

0
推荐指数
1
解决办法
498
查看次数