我已经限制我的C#windows应用程序只允许一次运行一个实例,使用这个问题如何强制C#.net应用程序在Windows中只运行一个实例?
它运行良好,并且不允许同时运行多个应用程序实例.
问题是如果用户试图打开应用程序的第二个实例,我希望当前活动的实例能够出现在前面.
我工作的问题似乎解决了这个问题,但它对我不起作用.
我认为这是因为我的应用程序不符合允许该方法的标准:SetForegroundWindow
工作.
我的问题是,我怎样才能做到这一点.我的代码如下:
using System ;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace RTRFIDListener_Client
{
static class Program
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
bool createdNew = true;
using (Mutex mutex = new Mutex(true, "RTRFIDListener_Client", out createdNew))
{
if (createdNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frm_Main());
}
else
{
Process current …Run Code Online (Sandbox Code Playgroud) 我有一个HTML div,我使用JavaScript从中检索值,如下所示:
var oCreditStatus = document.getElementById('creditStatusField');
var oOrigValue = oCreditStatus.value;
Run Code Online (Sandbox Code Playgroud)
var oOrigValue将始终为数字,有时为0(零).
我现在想要将数字递增或递减1.但是,当我执行以下操作时:
var oNewValue = oCreditStatus.value + 1;
Run Code Online (Sandbox Code Playgroud)
我得到值01,然后是011,这是错误的,因为我想要1,2.
我知道这不是一个数字,但我怎么做到这一点.
我刚刚遇到过这行C#代码,我不确定它是什么意思:
string sLine = "";
while ((sLine = oStreamReader.ReadLine()) != null)
Run Code Online (Sandbox Code Playgroud)
我假设oStreamReader.ReadLine()也是一个字符串.
我的猜测是,虽然两个变量都不为空?
我已经四处寻找,但未能找到任何对这种符号的引用
我遇到了以下代码,我不确定它是什么意思?
public class Countries
{
public Countries();
public static bool AllowInvoice(string pCountryCode);
public static bool IsPostcodeMandatory(string pCountryCode);
}
Run Code Online (Sandbox Code Playgroud)
然后以下列方式调用此代码:
Contact.IncludePostCode = Countries.IsPostcodeMandatory(countryCode);
Run Code Online (Sandbox Code Playgroud)
在我看来,这是一个界面?正在定义方法的地方,但是正在写其他人的身体?
如果是这种情况,我希望当我搜索整个项目时,我会找到该方法体的代码,但我找不到它在哪里?
有什么建议?
我有以下正则表达式:
TEST_(\d{4}).xml.gz
Run Code Online (Sandbox Code Playgroud)
哪个应匹配以下格式的字符串:
TEST_2015.xml.gz
Run Code Online (Sandbox Code Playgroud)
我确信这可以通过Regex测试程序运行,并在我的C#文件中返回一个匹配项.
这个正则表达式也将匹配
sTEST_2015.xml.gz
Run Code Online (Sandbox Code Playgroud)
要么
TEST_2015.xml.gzc
Run Code Online (Sandbox Code Playgroud)
等等
这不是我想要的.
所以我补充一下
^TEST_(\d{4}).xml.gz$
Run Code Online (Sandbox Code Playgroud)
现在哪个会匹配我想要的.
到目前为止都很好.
我的问题是,当我尝试将其添加到C#Regex匹配时,该模式不再匹配,如下所示:
var FileNameRegex = new Regex(@"^TEST_(\d{4}).xml.gz$");
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
var FileNameRegex = new Regex(@"(^)TEST_(\d{4}).xml.gz($)");
var FileNameRegex = new Regex(@"^(TEST_(\d{4}).xml.gz)$");
var FileNameRegex = new Regex(@"\^TEST_(\d{4}).xml.gz\$");
Run Code Online (Sandbox Code Playgroud)
等,但他们没有工作.
我错过了什么
我已经查看了谷歌和SO,并在C#中找到了与这些符号相关的问题,但我找到的解决方案都没有解决我的问题.
??
这是一个完整的程序:
static void Main(string[] args)
{
string sReconciliationFileFolder = ConfigurationManager.AppSettings["ReconciliationFileLocation"];
DirectoryInfo sReconciliationFileDirectory = new DirectoryInfo(sReconciliationFileFolder);
foreach (var Reconciliationfile in sReconciliationFileDirectory.GetFiles("*.gz"))
{
var FileNameRegex = new Regex(@"^TEST_(\d{4}).xml.gz$");
Match validFileName = FileNameRegex.Match(Reconciliationfile.FullName);
if (validFileName.Success)
{
Console.WriteLine(Reconciliationfile.FullName);
}
}
Console.WriteLine("FINISHED");
Console.ReadLine();
} …Run Code Online (Sandbox Code Playgroud) 我有以下C#设置:
DateTime DOB;
DateTime.TryParse(dicGuarantor["DateOfBirth"].ToString(), out DOB);
....
DateOfBirth = DOB;
Run Code Online (Sandbox Code Playgroud)
我的问题与TryParse失败的情况有关.
据我所知,变量
DateTime DOB
将保持未分配状态,这意味着在此方案中,当代码到达该行时:
DateOfBirth = DOB;
Run Code Online (Sandbox Code Playgroud)
它将给出与使用未分配变量有关的错误.
但是,在我的代码中似乎没有发生这种情况,不会发生错误,并且页面会按预期显示.
我担心这里确实存在错误,我没有看到它,并且由于它而导致代码将进一步破坏.
任何人都可以澄清 - 似乎没有太多的在线回答这个问题.
作为一个说明,我试过:
DateTime DOB = null;
Run Code Online (Sandbox Code Playgroud)
在声明中,但这说:
'无法将null转换为'System.DateTime',因为它是一个非空的值类型'
编辑:
鉴于下面的答案,我将首先将变量的声明添加DateOfBirth到问题中:
public DateTime? DateOfBirth { get; set; }
Run Code Online (Sandbox Code Playgroud)
这意味着这是一个 nullable DateTime Obeject
现在,假设TryParse失败,它将分配的变量:
DOB = DateTime.MinValue;
因此:
DateOfBirth = DateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)
现在代码中的其他地方,
我有以下内容:
if (DateOfBirth.HasValue)
...
Run Code Online (Sandbox Code Playgroud)
从运行代码开始,DateOfBirth在分配值时,这似乎会返回falseDateTime.MinValue
这是预期的吗?
我在C#中有以下声明
if(user.member.RegistrationDate.Value.Month == 10 || user.member.RegistrationDate.Value.Month == 11)
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法用速记来写这个;
if(user.member.RegistrationDate.Value.Month == 10 || 11)
Run Code Online (Sandbox Code Playgroud) 我是否正确地说:
public static void MethodName{bool first, bool second, bool third}
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
比这更有效:
public static void MethodName{bool [] boolArray}
{
bool first = boolArray[0];
bool second = boolArray[1];
bool third = boolArray[2];
//Do something
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,他们必须要声明第一,第二和第三 - 只是在不同的地方.但是对于第二个,它必须将它添加到一个数组中,然后再将其解压缩.
除非你像这样声明数组:
MethodName(new[] { true, true, true });
Run Code Online (Sandbox Code Playgroud)
在哪种情况下我不确定哪个更快?
我问,因为我正在考虑使用第二个,但想知道是否/对性能的影响.
在这种情况下,表现并不是特别重要,但对我来说澄清这一点会很有帮助.
另外,第二个的优点是你可以传递任意数量的值,我觉得它也更容易阅读?
我想使用它的原因是因为已经有大约30个参数被传递到该方法中,我觉得继续添加更多内容变得令人困惑.所有这些bool密切相关,所以我认为它可以使代码更易于打包它们.
我正在研究现有代码,并且在我的项目范围内花费时间重新设计方法以减少传递给方法的参数数量,但我认为理解这种变化的含义是一种好习惯.
如果我有以下2个for循环将在不同的线程上运行:
for (int ii = 1; ii < times.Length; ii+=2)
{
if (times[ii] - times[ii - 1] > maxGap)
return false;
}
for (int ii = 2; ii < times.Length; ii += 2)
{
if (times[ii] - times[ii - 1] > maxGap)
return false;
}
Run Code Online (Sandbox Code Playgroud)
这种情况可能发生在两个线程都试图从timesArray中的项读取的情况下,例如两个线程都可以同时尝试读取times[1].
鉴于这两个线程只会读取这些数组,这是一个问题,例如它是否会导致我的代码崩溃或任何其他意外的负面后果?
我有以下代码:
var maxCodes = Math.Max(pCodes.Count, poCodes.Count);
for (var i = maxCodes - 1; i > -1; i--)
{
var code = (i < pCodes.Count) ? pCodes.ElementAt(i) : new pCodeDto();
//....
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我得到了一个ArgumentOutOfRangeException,我想知道它是否可能是由具有三元表达式的代码行引起的?这是来自客户端的电子邮件异常,所以现在它就是我的全部.
我想知道整个这个表达式:
var code = (i < pCodes.Count) ? pCodes.ElementAt(i) : new pCodeDto();
Run Code Online (Sandbox Code Playgroud)
在代码决定哪条路由发生故障之前得到评估,这可能是导致此异常的原因?这是单线程代码.
pCodes并且poCodes都是ICollections
我有一个较大的SQL脚本,正在尝试使用命令行运行。
我在这里找到了这些说明:https : //docs.microsoft.com/zh-cn/sql/relational-databases/scripting/sqlcmd-run-transact-sql-script-files
似乎在说我可以使用以下命令:
sqlcmd -S myServer\instanceName -i C:\myScript.sql
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义。我假设我将使用与Web.Config连接字符串中相同的服务器详细信息。
问题是,这似乎没有指定运行脚本的数据库名称。
我认为这是因为假定SQL文件将具有数据库名称,但是我的文件太大而无法打开以确认这一点。
另外,我想指定数据库名称为双重安全。
谁能建议该怎么做?
另外,如果有人可以建议我如何使用命令行来读取文件的第一行,那也将非常棒。
提前致谢
我正在尝试比较小于等的字符串-以类似的方式比较数字。
我的问题是以下比较返回true:
var expectThisToBeFalse = "315160".CompareTo("40000") < 0;
Run Code Online (Sandbox Code Playgroud)
我知道我可以将它们作为数字进行比较,但是在我的应用程序中,我不知道它们是数字还是字母。
谁能解释我所错过的内容,以及是否有比较有效的比较方法
例如将显示:
“ 1”小于“ 2”
“ a”小于“ b”
“ aa”大于“ b”
等等...
我正在学习 C# 异步,并试图准确了解使方法异步的影响是什么。
如果我有以下方法(非异步):
public bool method()
{
int a = 2 + 1; //line 1
string b = "test"; //line 2
double c = 2.14; //line 3
return true; //line 4
}
Run Code Online (Sandbox Code Playgroud)
上面的方法中,编译器会依次执行每一行,比如先执行第1行,再执行第2行等
我的问题涉及添加异步对执行顺序的影响,如下所示。
public async Task<bool> method()
{
int a = 2 + 1; //line 1
string b = "test"; //line 2
double c = 2.14; //line 3
return true; //line 4
}
Run Code Online (Sandbox Code Playgroud)
添加 async 是否会导致编译器现在同时执行第 1、2、3 和 4 行?
如果是这样,如果我执行以下操作:
public async Task<bool> method()
{
int a …Run Code Online (Sandbox Code Playgroud) c# ×11
arrays ×1
asynchronous ×1
comparison ×1
javascript ×1
regex ×1
sql-server ×1
string ×1
var ×1