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

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

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

Re[3]: 別スレッドからの操作


(過去ログ 12 を表示中)

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

■3570 / inTopicNo.1)  別スレッドからの操作
  
□投稿者/ れれれ (25回)-(2007/05/15(Tue) 19:31:05)

分類:[C# (Windows)] 

2007/05/15(Tue) 19:33:42 編集(投稿者)
2007/05/15(Tue) 19:32:23 編集(投稿者)

お世話になっていますれれれです。

タイトルのあるとおり別スレッドからコントロールを操作したいのですが
http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html
を参考にしながらリストビューにアイテムを加えるということを行おうとしました。
コードの特徴的な部分を抜粋するとは以下のようになります
public class Form1:System.Windows.Forms.Form
{

  delegate string LisboxDelegate();
  (中略)
  private void StatThread(){
   thread txthread = new Thread(new ThreadStart(worker));
   txthread.Start();
  }

  void worker(){
   (中略)
   Invoke(new ListboxDelegate(listview1.Items.Add(item)));//コンパイルエラー
   (中略)
  }
}
itemはstring型です。

という風になっています。しかし、コンパイルが通らずそのエラーが

メソッド名が必要です。

といわれてしまいます。Addというメソッドを入れているのにこのエラーが出る理由がわかりません。
どのようにすればコンパイルエラーが回避できるのでしょうか?

どうかご指導のほどよろしくお願いします。
コードが読みにくかったら申し訳ありません
引用返信 編集キー/
■3571 / inTopicNo.2)  Re[1]: 別スレッドからの操作
□投稿者/ Hongliang (138回)-(2007/05/15(Tue) 19:59:27)
Hongliang さんの Web サイト
・エラーメッセージを読んでみる。
・エラーメッセージが理解できないなら、エラー番号を確かめてヘルプでそのエラー番号を引いてみる。
 ついでにそのページ内のリンクを一通り当たってみる。

でどうでしょう。
引用返信 編集キー/
■3578 / inTopicNo.3)  Re[1]: 別スレッドからの操作
□投稿者/ Jitta (320回)-(2007/05/16(Wed) 07:29:44)
No3570 (れれれ さん) に返信

メッセージの詳細がわからないので外しているかも。

着目点を間違っている。
引用返信 編集キー/
■3580 / inTopicNo.4)  Re[2]: 別スレッドからの操作
□投稿者/ ぽぴ王子 (199回)-(2007/05/16(Wed) 09:48:22)
ぽぴ王子 さんの Web サイト
No3578 (Jitta さん) に返信

確かに着眼点が間違っているという感じはします。

ただ、このサンプル
http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html
いつも思うんですが、これって絶対勘違いさせるようなコードになっていると思うのだ
けど、いいのかなあ…と。

ほかのページを参考にしてみるのもいいかもしれないです。
「着眼点が間違っている」と言われるのはなぜかを知るには良いかと。
http://dobon.net/vb/dotnet/programing/abortprocess.html
たとえばこの辺とか。
引用返信 編集キー/
■3583 / inTopicNo.5)  Re[1]: 別スレッドからの操作
□投稿者/ よねKEN (38回)-(2007/05/16(Wed) 10:48:46)
よねKEN さんの Web サイト
#背景がわからないので、そもそも本当にスレッドが必要なのか?については言及していません。

>   delegate string LisboxDelegate();

ListboxDelegateと書きたいのだと思いますが(なぜListviewじゃないのかは謎)、
これはlistview1.Items.Addメソッドを呼び出すために用意しているdelegateですよね。
であれば、メソッドシグニチャが違ってますので、使えません。

>    Invoke(new ListboxDelegate(listview1.Items.Add(item)));//コンパイルエラー
 :略
> という風になっています。しかし、コンパイルが通らずそのエラーが
>
> メソッド名が必要です。
> といわれてしまいます。Addというメソッドを入れているのにこのエラーが出る理由がわかりません。

listview1.Items.Add(item)はメソッドではありません。
listview1.Items.Addだったらメソッドでしょうけど。

> どのようにすればコンパイルエラーが回避できるのでしょうか?

Control.Invoke メソッド をヘルプで確認してください。
引用返信 編集キー/
■3585 / inTopicNo.6)  Re[2]: 別スレッドからの操作
□投稿者/ れれれ (26回)-(2007/05/16(Wed) 16:49:50)
No3583 (よねKEN さん) に返信


>メソッドシグニチャが違ってますので、使えません。

> listview1.Items.Add(item)はメソッドではありません。
> listview1.Items.Addだったらメソッドでしょうけど。

listview1.Items.Add(item)はitemをlistview1に入れるメソッドだと思ってました。
その辺の詳細な部分を確認してみます。あとメソッドシグニチャについても調べてみます。
引用返信 編集キー/
■3590 / inTopicNo.7)  Re[3]: 別スレッドからの操作
□投稿者/ 魔界の仮面弁士 (278回)-(2007/05/16(Wed) 18:07:05)
No3585 (れれれ さん) に返信
>>listview1.Items.Add(item)はメソッドではありません。
>>listview1.Items.Addだったらメソッドでしょうけど。
> listview1.Items.Add(item)はitemをlistview1に入れるメソッドだと思ってました。

それが意味するところは、

  本来は「メソッドそのもの」を指定しなければいけないところに、
  listview1.Items.Add(item) メソッドの「実行結果」、すなわち
  「ListViewItem 型のオブジェクト」を指定してしまっている。

ということで。


> あとメソッドシグニチャについても調べてみます。
MSDN 上では、「シグニチャ」ではなく「シグネチャ」と訳されていますね。
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -