Я не мог найти что-либо по этой точной теме, поэтому, пожалуйста, отведите меня в правильном направлении, если вопрос уже существует.
Из того, что я узнал о .NET, невозможно получить доступ к переменным в разных потоках (пожалуйста, исправьте меня, если это утверждение неверно, это то, что я где-то читал).
Теперь в этом коде, однако, кажется, что он не должен работать:
class MyClass
{
public int variable;
internal MyClass()
{
Thread thread = new Thread(new ThreadStart(DoSomething));
thread.IsBackground = true;
thread.Start();
}
public void DoSomething()
{
variable = 0;
for (int i = 0; i < 10; i++)
variable++;
MessageBox.Show(variable.ToString());
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void SomeMethod();
{
MyClass mc = new MyClass();
}
}
Когда я запускаю SomeMethod()
,.NET не должен создавать исключение, потому что созданный объект mc
работает в другом потоке, чем поток, созданный в mc
-initializer, и этот новый поток пытается получить доступ локальная переменная mc
?
MessageBox
показывает 10
как (не) ожидаемый, но я не уверен, почему это должно сработать.
Возможно, я не знал, что искать, но ни одна тема нитей, которую я мог бы найти, рассмотрит эту проблему, но, возможно, моя идея о переменных и потоках неверна.