小编Dev*_*tor的帖子

Foreach循环XmlNodeList

目前我有以下代码:

XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");
foreach (int i in tweets)
{
    if (tweets[i].InnerText.Length > 0)
    {
         MessageBox.Show(tweets[i].InnerText);
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,它给了我System.InvalidCastExceptionforeach线.

以下代码完美地工作(没有foreach,i被替换为零):

XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");

if (tweets[0].InnerText.Length > 0)
{
     MessageBox.Show(tweets[0].InnerText);
}
Run Code Online (Sandbox Code Playgroud)

c# foreach xmldocument

17
推荐指数
3
解决办法
6万
查看次数

Dotnet发布不发布DLL到发布目录

我想发布我自己的.NET Core(2.2)应用程序,但是一个特定的NuGet包(Microsoft.Management.Infrastructure)永远不会发布到该publish文件夹(因为.dll文件中不存在).

我正在使用该命令dotnet publish -c Release --self-contained -r win-x64 ConsoleApp1.在visual studio中运行应用程序时,一切正常.但是在运行已编译的可执行文件时,我得到一个FileNotFoundException:

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.Management.Infrastructure,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'.该系统找不到指定的文件.在ConsoleApp1.Program.Main(String [] args)

重现

1)创建一个简单的.NET Core控制台应用程序(我测试了2.1和2.2,没有区别)
2)添加NuGet包Microsoft.Management.Infrastructure
3)将以下代码添加到应用程序:

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var sessionOptions = new DComSessionOptions
            {
                Timeout = TimeSpan.FromSeconds(30)
            };

            CimSession Session = CimSession.Create("localhost", sessionOptions);

            var processors = Session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_Processor");
            foreach (CimInstance processor in processors)
            {
                Console.WriteLine(processor.CimInstanceProperties["Name"].Value);
            }

            Console.ReadLine(); …
Run Code Online (Sandbox Code Playgroud)

c# nuget .net-core

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

在Win 7上更改程序的音量

我想更改程序的音量(而不是音量).我现在有以下代码:

DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

private void volumeBar_Scroll(object sender, EventArgs e)
{
    // Calculate the volume that's being set
    int NewVolume = ((ushort.MaxValue / 10) * volumeBar.Value);
    // Set the same volume for both the left and the right channels
    uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
    // Set the volume
    waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}
Run Code Online (Sandbox Code Playgroud)

这仅适用于Win XP,而不适用于Windows 7(也可能不适用于Vista).我没有找到任何可以在Win 7上实现相同的脚本,只是为了更改主卷(我不会追求).

c# pinvoke winmm

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

两台Intel机器上的CPU ID相同

可能重复:
WIN32_Processor ::是ProcessorId对所有计算机都是唯一的

我正在创建一个具有试用功能的应用程序.要检测某个用户是否已经使用过试用版,应用程序会使用它们连接到我的服务器machineHash.

machineHash功能是这样的:

string cpuInfo = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)
{
    if (cpuInfo == "")
    {
        //Get only the first CPU's ID
        cpuInfo = mo.Properties["processorID"].Value.ToString();
        break;
    }
}
return cpuInfo;
Run Code Online (Sandbox Code Playgroud)

但是,它确实将我的处理器ID报告为BFEBFBFF000206A7(在两台不同的Intel机器上,i5和Celeron).谷歌搜索BFEBFBFF000206A7也有点击,所以它不是唯一的.

谁能告诉我为什么这不是唯一的?我不想使用VolumeSerial,C:\因为可以通过简单的命令轻松更改驱动器.

c#

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

SignalR核心 - 使死连接无效

问题

我正在使用带有ASP.NET Core SignalR的.NET Core 2.2.目前我正在SQL数据库中保存所有连接状态(请参阅此文档 ;即使它是"旧"SignalR库的手册,逻辑也是相同的).我也使用Redis背板,因为我的应用程序可以水平扩展.

但是,重新启动我的应用程序时,当前连接不会关闭并将变为孤立状态.之前链接的文章指出:

如果Web服务器停止工作或应用程序重新启动,则不会调用OnDisconnected方法.因此,您的数据存储库可能具有不再有效的连接ID的记录.要清除这些孤立的记录,您可能希望使与应用程序相关的时间范围之外创建的任何连接无效.

这个问题

在"旧"SignalR中有一个ITransportHeartbeat(这个脚本完美实现)但是.NET Core版本没有这样的接口(至少,我找不到它).

我怎么知道连接是否不再存在?我想(或实际需要)清理旧的连接ID.

c# asp.net-core asp.net-core-signalr

6
推荐指数
2
解决办法
338
查看次数

动态创建线程

我知道如何使用线程和后台工作程序,但只能以"静态"方式(所以硬编码).但是我想用这样的东西

public static void StartThread(string _Method)
{
    Thread t = new Thread(() => _Method;
    t.Start();
}
Run Code Online (Sandbox Code Playgroud)

我知道这会失败,因为它_Method是一个字符串.我已阅读使用,delegates但我不确定这将如何工作,如果我需要它在这种情况下.

我想在需要时启动特定功能的线程(以便动态创建线程).

c# multithreading

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

SignalR 集线器检查连接是否仍然有效

我们有一个中心,可以像聊天一样管理客户。
在某些情况下,我们注意到存在未调用断开连接事件的“死”连接。
在 ASP .NET 框架 4.5.2 SignalR 上,我们用来ITransportHeartbeat检查当前的连接状态:

// SignalR connection state check - .NET framework 4.5.2
var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();
var connectionId = appConnection;
var connection = heartBeat.GetConnections().FirstOrDefault(
                                   c => c.ConnectionId == connectionId);

if (!connection.IsAlive)
{
     //...
}
Run Code Online (Sandbox Code Playgroud)

ITransportHeartbeat在 SignalR .NET Core 上再也看不到了。有什么办法可以找到当前特定的连接状态吗?

signalr signalr-hub asp.net-core-signalr

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

这段代码可以简化吗?

这段代码很多if/else,我想知道它是否可以简化为少数几行.代码工作得很好,但我更喜欢更有效和更清洁的方式.

if (textBox_naam.Text.Length < 3)
{
   textBox_naam.BackColor = Color.FromArgb(205, 92, 92);
}
else
{
   textBox_naam.BackColor = Color.White;
}

if (textBox_email.Text.Length < 5)
{
   textBox_email.BackColor = Color.FromArgb(205, 92, 92);
}
else
{
   textBox_email.BackColor = Color.White;
}

if (textBox_body.Text.Length < 20)
{
   textBox_body.BackColor = Color.FromArgb(205, 92, 92);
}
else
{
   textBox_body.BackColor = Color.White;
}
Run Code Online (Sandbox Code Playgroud)

c#

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

名称XXXX在当前上下文中不存在

我有以下代码:

public Form1()
{
    InitializeComponent();


    string strRadio = Utils.ReadFile(strTemp + @"\rstations.txt");
    string[] aRadio = strRadio.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries);    
    for (int i = 0; i < aRadio.Length; i += 2)
    {
       listBox.Items.Add(aRadio[i]);
    }

}

private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
    int index = listBox.SelectedIndex;
    MessageBox.Show(aRadio[(index+1)]);
}
Run Code Online (Sandbox Code Playgroud)

现在错误是The name 'aRadio' does not exist in the current context.哪个来自MessageBox.Show(aRadio[(index+1)]);.我是否需要宣布aRadio公开或其他什么?如果是这样,怎么办呢?

c#

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

在显示其他表单时禁用完整表单

我想禁用我mainFormoptionsForm被设置为显示.

要做到这一点,我想把一个看不见的形式放在上面,mainForm所以互动是不可能的(但只有通过鼠标点击,键盘敲击仍然可以工作).

如何才能做到这一点?

.net c# .net-3.5 winforms

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