当人们使用Monostate模式而不是singleton来维护全局对象时,会出现什么情况?
编辑:我知道Singleton和Monostate模式是什么.在很多场景中也实现了Singleton.只想知道需要实现MonoState模式的场景(案例).
例如.我需要在我的Windows窗体应用程序中维护每个屏幕的列列表.在这种情况下,我可以使用Singleton Dictionary.但是,我在静态全局var中存储了一个List,我想提供索引器(因为我需要动态地将新条目添加到列表中,如果key不存在),我可以将ScreenDetails.ScreenName指定为键并获取ScreenDetails .ColumnsTable.由于索引器无法在静态类上操作,因此我将模式更改为Monostate.
所以我想知道哪些其他场景可能迫使用户使用Monostate而不是Singletons.
我使用以下代码来触发iexplore进程.这是在一个简单的控制台应用程序中完成
public static void StartIExplorer()
{
var info = new ProcessStartInfo("iexplore");
info.UseShellExecute = false;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
string password = "password";
SecureString securePassword = new SecureString();
for (int i = 0; i < password.Length; i++)
securePassword.AppendChar(Convert.ToChar(password[i]));
info.UserName = "userName";
info.Password = securePassword;
info.Domain = "domain";
try
{
Process.Start(info);
}
catch (System.ComponentModel.Win32Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出错误The system cannot find the file specified
.运行时相同的代码而不指定用户凭据可以正常工作.我不确定为什么会抛出这个错误.
有人可以解释一下吗?
单击CheckBox时,我需要选择ListBox中的所有项目.是否可以使用一行代码选择ListBox中的所有项目?或者我是否必须遍历所有项目并将其中的每一项设置为true?
谢谢 :)
我在我的C#2.0 Windows窗体应用程序中使用了一个列表框.填充列表框的方法是
private void PopulateListBox(ListBox lb, ReportColumnList reportColumnList)
{
lb.DataSource = reportColumnList.ReportColumns;
lb.DisplayMember = "ColumnName";
lb.ValueMember = "ColumnName";
}
Run Code Online (Sandbox Code Playgroud)
但是,当它执行该方法时,它也会调用列表框的SelectedIndexChanged事件处理程序,即使我没有在上面的方法中设置所选索引.如何阻止为上述代码调用SelectedIndexChanged事件处理程序?
我希望仅在用户在ListBox中进行选择时才调用该事件.或者是否有任何其他事件仅供用户使用鼠标点击选择列表框项目?
另外,即使用户单击列表框中的空白区域,也会触发SelectedIndexChanged事件.所以我想知道它与MouseClick事件的不同之处是什么?
我们有一个用C#编写的应用程序,它连接到ms sql服务器.我们使用为每个数据库调用创建一个存储过程,但后来我们注意到使用存储过程给我们带来了很大的缺点,如果我们更改数据库,我们不知道需要更新哪些存储过程.
现在我想知道使用存储过程是坏事还是好事?
我在Windows窗体上使用DataGridView.它只显示两列.默认情况下,在运行应用程序时,如果单击列标题,则datagridview将根据该列进行排序.但是,我想完全禁用网格视图上的排序.我无法找到可以设置sorting = false的属性,或类似的东西.
谁能告诉我如何禁用网格视图排序?
谢谢 :)
编辑:
我想我可以将各列设置为NotSortable(下面的贴出答案).可以在网格视图级别而不是单个列中完成吗?
我在处理选择时遇到问题DataGridView
.我的网格视图包含金额列.表单上有一个文本框,它应显示所选网格视图行的总量.因此,当用户选择/取消选择gridview行并相应地计算(加/减)量时,我需要捕获事件.我找到了两种方法:
使用RowEnter
和RowLeave
事件.当用户选择/取消选择单行时,这些工作正常.但是,当用户一次选择多行时,该事件仅针对最后一行触发.因此,从我的总金额中,只添加/减去最后一行中的金额.从而使我的结果错误.
使用该RowStateChanged
事件.这适用于多行.但是,如果用户滚动数据网格,事件将被触发事件.
有谁处理过这种情况.我想知道我应该使用哪个datagrid事件,以便我的代码仅在用户选择/取消选择包含多行的行时执行.
是否可以在同一个Windows应用程序本身内捕获Windows应用程序的任务管理器结束进程?我正在使用一个C#2.0 win应用程序,我希望在结束进程发生时进行一些数据库处理(在数据库中将标志从'Y'更改为'N').
为什么委托需要在方法触发之前调用EndInvoke?如果我需要调用EndInvoke(它阻塞线程)那么它真的不是异步调用吗?
这是我试图运行的代码.
class Program
{
private delegate void GenerateXmlDelegate();
static void Main(string[] args)
{
GenerateXmlDelegate worker = new GenerateXmlDelegate(GenerateMainXml);
IAsyncResult result = worker.BeginInvoke(null, null);
}
private static void GenerateMainXml()
{
Thread.Sleep(10000);
Console.WriteLine("GenerateMainXml Called by delegate");
}
}
Run Code Online (Sandbox Code Playgroud)