|
分類:[C#]
ぽぴ王子さん、ありがとうございます。
実際のコードが以下で、
namespace CallbackTest { public partial class Form1 : Form { [DllImport("user32")] private static extern int EnumWindows(CallBack x, int y);
private delegate bool CallBack(int hwnd, int lParam); private delegate void WriteLineDelegate(string str);
public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); }
private static bool Report(int hwnd, int lParam) { // ビルドエラー WriteLineDelegate dlg = new WriteLineDelegate(WriteLine); Invoke(dlg, new object[] { "test" }); return true; }
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { // これは成功する WriteLineDelegate dlg = new WriteLineDelegate(WriteLine); Invoke(dlg, new object[] { "test" });
CallBack myCallBack = new CallBack(Report); EnumWindows(myCallBack, 0); }
// ラベルに文字列を表示する private void WriteLine(string str) { label1.Text = str; } } }
ビルドエラーが以下です。 静的でないフィールド、メソッド、またはプロパティ'CallbackTest.Form1.WriteLine(string)' で、オブジェクト参照が必要です。 静的でないフィールド、メソッド、またはプロパティ 'System.Windows.Forms.Control.Invoke(System.Delegate, params object[])' で、オブジェクト参照が必要です。
オブジェクト参照というのが調べたのですが、いまいち理解できませんでした。。。
|