Possible Duplicate:
The calling thread cannot access this object because a different thread owns itInvalidOperationException:呼び出し元のスレッドは、別のスレッドがそのオブジェクトを所有しているため、このオブジェクトにアクセスできません。
エラー:
The calling thread cannot access this object because a different thread owns it.
コード:
public partial class MainWindow : Window
{
Thread t;
bool interrupt;
public MainWindow()
{
InitializeComponent();
}
private void btss_Click(object sender, RoutedEventArgs e)
{
if (t == null)
{
t = new Thread(this.calculate);
t.Start();
btss.Content = "Stop";
}
else
{
t.Interrupt();
}
}
private void calculate()
{
int currval = 2;
int devide = 2;
while (!interrupt)
{
for (int i = 2; i < currval/2; i++)
{
if (2 % i != 0)
{
lbPrimes.Items.Add(currval.ToString()); //Error occures here
}
}
currval++;
}
}
}
これを引き起こしているだろう、とどのように私はそれを解決することができますか?
ここで 'Calculate'は問題ではないので、' lblPrimes'にアクセスしてください。 – Aliostad
はい、正確には計算されているので、自己に戻ります。もちろん、それを別の方法で行い、呼び出しをネストして深く入れてもかまいません。単なる例です。 – TheCodeKing
これは**準最適です**と*はスレッドを完全に使用する目的を破ります。 'Invoke'で計算全体が行われることは望ましくなく、ラベルの更新だけです。あなたのコードを使って、スレッドは何もしていません。 – Aliostad