目前我有以下代码:
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.InvalidCastException
foreach线.
以下代码完美地工作(没有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) 我想发布我自己的.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) 我想更改程序的音量(而不是主音量).我现在有以下代码:
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上实现相同的脚本,只是为了更改主卷(我不会追求).
我正在创建一个具有试用功能的应用程序.要检测某个用户是否已经使用过试用版,应用程序会使用它们连接到我的服务器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:\
因为可以通过简单的命令轻松更改驱动器.
我正在使用带有ASP.NET Core SignalR的.NET Core 2.2.目前我正在SQL数据库中保存所有连接状态(请参阅此文档 ;即使它是"旧"SignalR库的手册,逻辑也是相同的).我也使用Redis背板,因为我的应用程序可以水平扩展.
但是,重新启动我的应用程序时,当前连接不会关闭并将变为孤立状态.之前链接的文章指出:
如果Web服务器停止工作或应用程序重新启动,则不会调用OnDisconnected方法.因此,您的数据存储库可能具有不再有效的连接ID的记录.要清除这些孤立的记录,您可能希望使与应用程序相关的时间范围之外创建的任何连接无效.
在"旧"SignalR中有一个ITransportHeartbeat
(这个脚本完美实现)但是.NET Core版本没有这样的接口(至少,我找不到它).
我怎么知道连接是否不再存在?我想(或实际需要)清理旧的连接ID.
我知道如何使用线程和后台工作程序,但只能以"静态"方式(所以硬编码).但是我想用这样的东西
public static void StartThread(string _Method)
{
Thread t = new Thread(() => _Method;
t.Start();
}
Run Code Online (Sandbox Code Playgroud)
我知道这会失败,因为它_Method
是一个字符串.我已阅读使用,delegates
但我不确定这将如何工作,如果我需要它在这种情况下.
我想在需要时启动特定功能的线程(以便动态创建线程).
我们有一个中心,可以像聊天一样管理客户。
在某些情况下,我们注意到存在未调用断开连接事件的“死”连接。
在 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 上再也看不到了。有什么办法可以找到当前特定的连接状态吗?
这段代码很多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) 我有以下代码:
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
公开或其他什么?如果是这样,怎么办呢?
我想禁用我mainForm
而optionsForm
被设置为显示.
要做到这一点,我想把一个看不见的形式放在上面,mainForm
所以互动是不可能的(但只有通过鼠标点击,键盘敲击仍然可以工作).
如何才能做到这一点?
c# ×9
.net ×1
.net-3.5 ×1
.net-core ×1
asp.net-core ×1
foreach ×1
nuget ×1
pinvoke ×1
signalr ×1
signalr-hub ×1
winforms ×1
winmm ×1
xmldocument ×1