我正在使用Windows窗体应用程序并且使用System.Timers.Timer来定期检查数据库中的数据.
如何将计时器Elapsed事件处理程序中发生的异常传递到主应用程序中?如果我使用下面的代码,异常会被"吞噬",主应用程序永远不会得到它(即使我有ThreadException和UnHandledException的处理程序).
// Main Form
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// Manager class
private System.Timers.Timer _timer;
void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
doSomeDatabaseActions();
}
catch (Exception ex)
{
throw new ApplicationException("How do I get this error back into main thread...", ex);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种格式化DataGridViewTextBoxColumn的方法,以便在数据绑定期间格式化数据表的值.例如,我有一个CompanyName属性,当数据绑定发生时,我需要从CompanyName获取前5个字母.
我可以挂钩不同的DataGridView事件(例如RowsAdded)并遍历所有行并执行操作,但我想找到更复杂的方法来执行此操作.由于我已决定使用数据绑定,因此循环数据并对其进行修改有点违背了数据绑定概念.
我所追求的是,如何做到如下,但添加自定义格式逻辑:
dataGridView1.Columns[colSomeDate.Index].DataPropertyName = "SomeDate";
colSomeDate.DefaultCellStyle.Format = "yyyy";
Run Code Online (Sandbox Code Playgroud)
我想我应该实现IFormatProvider,但我不太明白我应该如何实现它.
dataGridView1.Columns[companyName.Index].DataPropertyName = "CompanyName";
companyName.DefaultCellStyle.FormatProvider = new ShortText(); // ShortText should implement IFormatProvider
Run Code Online (Sandbox Code Playgroud) 如何使用正则表达式仅获取第一行多行文本?
string test = @"just take this first line
even there is
some more
lines here";
Match m = Regex.Match(test, "^", RegexOptions.Multiline);
if (m.Success)
Console.Write(m.Groups[0].Value);
Run Code Online (Sandbox Code Playgroud) 我有一个Windows窗体应用程序,当时只允许一个实例运行.我已经使用Mutex实现了Singleton.应用程序必须可以从命令行启动(带或不带参数).应用程序由脚本启动和退出.用户不能对其采取任何行动.
因此,应用程序的目的是简单的"指标"应用程序,它将为最终用户显示一些视觉和图形信息.最终用户无法对其进行任何操作,只需查看即可.它是Windows窗体应用程序,因为视觉和图形外观是相对容易的实现(你可以得到它最顶层,无边框等).
简单地说:当有人试图用退出命令行参数运行相同的应用程序时,如何退出当前运行的应用程序?
bool quit = (args.Length > 0 && args[0] == "quit") ? true : false;
using (Mutex mutex = new Mutex(false, sExeName))
{
if (!mutex.WaitOne(0, true))
{
if (quit)
{
// This is the tricky part?
// How can I get reference to "previous" launced
// Windows Forms application and call it's Exit() method.
}
}
else
{
if (!quit)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Run Code Online (Sandbox Code Playgroud) 我将应用程序设置存储在HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany分支下.不同用户的设置必须相同,这就是设置不在HKEY_CURRENT_USER下的原因.注册表值仅在使用应用程序期间读取.
现在,在Windows Vista中,由于UAC,您不能再使用以下代码来读取注册表值:
RegistryKey myKey = Registry.LocalMachine.CreateSubKey
("SOFTWARE\\MyCompany\\MyAppName");
Run Code Online (Sandbox Code Playgroud)
如何在我的代码(C#)中读取LocalMachine分支的值?
我有一个包含文件数据的byte [].数组可以包含几种不同文件类型的数据,如xml,jpg,html,csv等.
我需要将该文件保存在磁盘中.
我正在寻找ac#代码,以便在您了解内容类型时找到正确的文件扩展名,但不确定文件扩展名?
c# ×6
winforms ×2
content-type ×1
data-binding ×1
datagridview ×1
file ×1
format ×1
mutex ×1
regex ×1
registry ×1
singleton ×1
timer ×1