C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ワーカースレッド

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■84019 / inTopicNo.1)  ワーカースレッド
  
□投稿者/ Use (1回)-(2017/05/09(Tue) 15:46:45)

分類:[C#] 

Windows 7/ Visual Studio 2010 C#


OutDataをラベルに表示することが出来ず、下記のエラーが表示されます。
”静的でないフィールド、メソッド、またはプロパティ で、オブジェクト参照が必要です”

ラベルにOutDataを表示するにはどのようにしたら宜しいでしょうか?


private void Main(object sender, EventArgs e)
{
Worker workerObject = new Worker();
Thread workerThread = new Thread(workerObject.DoWork);
workerThread.Start();
}

public class Worker
{
public void DoWork()
{
string Outdata = "";
while (!_shouldStop)
{
   label2.text= OutData:
}
}

public void RequestStop()
{
_shouldStop = true;
private volatile bool _shouldStop;
}
引用返信 編集キー/
■84022 / inTopicNo.2)  Re[1]: ワーカースレッド
□投稿者/ 大谷刑部 (29回)-(2017/05/09(Tue) 17:36:44)
No84019 (Use さん) に返信
> Windows 7/ Visual Studio 2010 C#
>
>
> OutDataをラベルに表示することが出来ず、下記のエラーが表示されます。
> ”静的でないフィールド、メソッド、またはプロパティ で、オブジェクト参照が必要です”
>

↓以下と似た話な気がしますが。
http://d.hatena.ne.jp/shingotada+2/20100720/1279644242
引用返信 編集キー/
■84024 / inTopicNo.3)  Re[1]: ワーカースレッド
□投稿者/ 魔界の仮面弁士 (1271回)-(2017/05/10(Wed) 10:30:50)
No84019 (Use さん) に返信
> label2.text= OutData:

C# では、行末に来るのは :(コロン) ではなく ;(セミコロン) です。
また、ラベルならば .text ではなく .Text のはずです。


> private void Main(object sender, EventArgs e)

static void Main() では無いのですね。

引数定義を見た限り、何かのイベントハンドラとして割り当てられているようですが、
この Main メソッドはどこから呼ばれるようになっているのでしょうか。


> Thread workerThread = new Thread(workerObject.DoWork);

label2 という変数は、デザイナで貼られたものでしょうか。
もしも class Worker 以外のクラス上にあるラベルなら、Worker 内からは
  label2.Text = 何某;
でアクセスすることはできません。(どこのラベルを操作するか明示されていないため)
  

また、そもそもラベルは、UI スレッドに属することになるわけですが、
今回の Worker の DoWork メソッドは、UI スレッドではなく、
新規に作成された別スレッドで動作するようになっています。


何をしたいのか意図が読み取れなかったのですが、基本的に、
別スレッドで管理されているオブジェクトを直接操作することはできませんので、
オブジェクトの設計から見直した方が良いと思います。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ