关于在c#WinForms中跨多个表单提供方法的担忧
我想知道我在多个表单中提供方法的方法是否安全,或者我的方法是否存在我不知道的可能问题 我目前正在处理一个有十几个表单的应用程序,其中有许多表单调用某些方法,因此我创建了一个名为关于在c#WinForms中跨多个表单提供方法的担忧,c#,winforms,C#,Winforms,我想知道我在多个表单中提供方法的方法是否安全,或者我的方法是否存在我不知道的可能问题 我目前正在处理一个有十几个表单的应用程序,其中有许多表单调用某些方法,因此我创建了一个名为Globals.cs的新类,并在该类中创建了一系列在整个应用程序中调用的类和方法 到目前为止,我还没有注意到我的设置有任何问题,但我关心的是,如果Globals.cs中的一个方法被不同的表单同时调用,会发生什么情况?我有将传入的数据写入SQL表的void方法,也有返回数据的方法 我在某些表单中使用了BackGroundWo
Globals.cs
的新类,并在该类中创建了一系列在整个应用程序中调用的类和方法
到目前为止,我还没有注意到我的设置有任何问题,但我关心的是,如果Globals.cs中的一个方法被不同的表单同时调用,会发生什么情况?我有将传入的数据写入SQL表的void方法,也有返回数据的方法
我在某些表单中使用了BackGroundWorkers
,如果其中一个方法同时被两个不同的Worker调用,或者由一个Worker和另一个表单上的方法调用调用,会发生什么情况
下面是我的Globals.cs类的示例和其中的一些方法
class Globals
{
public static string getUserSetting(string userID, string form, string obj_name)
{
string value = "";
// Get setting value from SQL Table and assign it to return variable
return value;
}
public static void saveUserSetting(string userID, string form, string obj_name, string value)
{
// Save Passed in settings to SQL Table
}
public static string getEnviro()
{
if (!string.IsNullOrEmpty(Settings.Default.EnvironmentDefault))
return Settings.Default.EnvironmentDefault.ToString();
else
return "Live";
}
public class Properties
{
public static System.Drawing.Color colorPropertyFromString(string stringValue)
{
System.Drawing.Color returnValue = System.Drawing.Color.Empty;
if (!string.IsNullOrEmpty(stringValue))
{
int colorIntVal = -1;
bool output;
output = int.TryParse(stringValue, out colorIntVal);
returnValue = System.Drawing.Color.FromArgb(colorIntVal);
}
return returnValue;
}
}
}
/*
I use this Class to create new instances of SqlConnections through my application.
Example: If I need a new SqlConnection I would go:
SqlConnection conn = new SqlConnection(Conn.ConnectionString);
*/
public sealed class Conn
{
public static string ConnectionString = Settings.Default.ArborgConnectionString.ToString();
}
原则上,具有全局功能是可以的。您需要考虑是否有可能通过多个线程同时调用函数,这是否有害。例如,在一个线程中读取一个值,而另一个线程正在更新该值。阅读一些关于使代码线程安全的内容。原则上,具有全局函数是可以的。您需要考虑是否有可能通过多个线程同时调用函数,这是否有害。例如,在一个线程中读取一个值,而另一个线程正在更新该值。阅读一些关于使代码线程安全的内容
不确定您遵循的是什么标准和命名约定。我建议您将一些方法和类重命名如下:
GetUserSetting
SaveUserSettingGetEnvironmentColorPropertyFromString
连接
。不确定您使用的是什么标准和命名约定下面。我建议您将一些方法和类重命名如下:GetUserSetting
SaveUserSetting
GetEnvironment
ColorPropertyFromString
连接
。感谢您提供的链接,一个具有输入参数、分析这些参数并返回一个结果。当一个以上的线程同时调用这样的方法时会发生什么情况?线程2会得到线程1传入的结果吗?还是会创建一个方法实例,每个线程在该实例中返回自己的结果?@Cornelius:如果这些方法(函数)不要修改任何全局变量/对象。它们很好。一个函数可能会被任意数量的并发线程调用,因为它的执行是在该特定线程中完成的。我想你可以说它创建了一个函数的实例,是的。你只需小心在中间线程中的方法中正在更新的资源te被一个线程读取时,因为另一个线程尚未完成更新。除此情况外,多个线程调用同一个方法是可以的。@Ian和Visual Vincent,因此如果一个方法或函数写入传入的信息,让我们假设一个Sql表被不同的线程同时调用,那么它将是一个问题?在这种情况下您可以依靠SQL Server来保证您的安全。它可以处理许多同时发生的请求。感谢您提供的链接,一个具有输入参数、分析这些参数并返回结果的方法如何。当这样的方法被多个线程同时调用时会发生什么情况?线程2会得到线程1传入的结果吗它会创建一个实例吗