C# 多线程应用程序中的委托
我是新加入委派的,我想看看下面的代码是否会导致任何问题。我写的代码没有使用共享变量,而是使用了一个共享委托,如下所示C# 多线程应用程序中的委托,c#,multithreading,winforms,delegates,C#,Multithreading,Winforms,Delegates,我是新加入委派的,我想看看下面的代码是否会导致任何问题。我写的代码没有使用共享变量,而是使用了一个共享委托,如下所示 public delegate void delSaveData(string data1, string data2); private static delSaveData _delSaveData; static void Main(string[] args) { Thread td1 = new Thread(td1
public delegate void delSaveData(string data1, string data2);
private static delSaveData _delSaveData;
static void Main(string[] args)
{
Thread td1 = new Thread(td1func);
Thread td2 = new Thread(td2func);
td1.Start();
td2.Start();
}
private static void td1func()
{
while(true)
{
// do some operation
_delSaveData= new delSaveData(SaveData);
_delSaveData("someValueFromtd1", "someValueFromtd1");
}
}
private static void td2func()
{
while(true)
{
// do some operation
_delSaveData= new delSaveData(SaveData);
_delSaveData("someValueFromtd2", "someValueFromtd2");
}
}
private static void SaveData(string test1, string test2)
{
//Save Data in database
}
我假设代码应该可以正常工作,因为每次都会创建一个新的委托实例。我说得对吗?
如果所创建的委托实例中有一个出现问题,它会影响其他实例吗
提前感谢您的回答,首先,您没有修改(添加或删除)要委派的处理程序。那么为什么总是要创造新的呢 试试下面的方法
private static readonly delSaveData _delSaveData = new delSaveData(SaveData);
这应该没问题。您可以在任意数量的线程中使用它
如果出了问题怎么办
出了什么问题?不知道你在这里是什么意思
我假设代码应该可以正常工作,因为每次都会创建一个新的委托实例。我说得对吗
你试过运行代码吗?你试过什么?
我看不出有什么直接的问题
我可以告诉您:如果从任一线程抛出异常(实例化委托或执行委托时可能出现的问题),那么它将无法处理。
一个线程中的异常不会影响另一个线程。因此,如果“出了问题”,它不会影响其他实例 你是对的,但是,为什么你需要这里的委托,你可以直接调用
SaveData
。嗨,这只是对我理解委托的一个测试,当然我可以直接调用函数。