C# - 在线程之间传递数据的大多数OOP方式

时间:2014-10-26 21:06:15

标签: c# multithreading oop

让我们说我有一个等待用户在推进之前点击按钮的主题:

System.Threading.AutoResetEvent dialoguePause = new System.Threading.AutoResetEvent(false);

public void AskQuestion()
{
  /* buttons containing choices created here */

  dialoguePause.WaitOne();

  /*Code that handles choice here */
}

public void Choice_Clicked(object sender, EventArgs e)
{
  dialoguePause.Set();
}

如何在不依赖类变量的情况下将来自线程的数据传递给Ask_Clicked到AskQuestion?我能做的最好的就是:

System.Threading.AutoResetEvent dialoguePause = new System.Threading.AutoResetEvent(false);
string mostRecentChoice;


public void AskQuestion()
{
  /* buttons containing choices created here */

  dialoguePause.WaitOne();

  MessageBox.Show("You chose " + mostRecentChoice + ".");
}

public void Choice_Clicked(object sender, EventArgs e)
{
  mostRecentChoice = (sender as Button).Content.ToString(); //Ugly!
  dialoguePause.Set();
}

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一目标:

  • 在Singleton或Monostate中使用属性。总是存在一个这样的属性的实例,因此无论哪个线程写入,哪个读取,都将共享它,只要它们在一个应用程序域中。
  • 使用消息
  • 如果您在同一个班级,请使用字段或属性(注意跨线程!)
  • ...

我想说的是,这取决于应用程序。我不知道这是WinForm,WPF还是Web ......