- PR -

int xを戻り値とするint method();をThreadで実行したい

投稿者投稿内容
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-08 14:12
コールバックとわかんなかったので、デリゲートとかいうのを使ってできませんか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2005-11-08 14:43
できますよ。

Delegate を宣言してインスタンスを作って
BeginInvoke してください。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-11-08 14:45
デリゲートとかいうのを使ってできるみたいですね。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpovrasynchronousprogrammingoverview.asp
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-09 10:05
public AsyncMain
{
static void Main(string[] args)
{
AsyncDemo ad = new AsyncDemo();
AsyncDelegate dlgt = new AsyncDelegate(ad.Method)
IAsyncResult ar = dlgt.BeginInvoke();

}
public AsyncDemo
{
public int[] Method()
{
{処理}
return x;
}

}
public delegate int[] MethodDelegate();
これだとBeginInvokeに何か引数を入れないとだめみたいなのですが、どうすればいいでしょうか。xを入れてみましたがだめでした。
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-09 11:31
上の6行目のAsyncDelegateはMethodDelegateのまちがいです。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2005-11-09 12:36
google で delegate, callback, BeginInvoke で検索するといくつか出てきますが
菊池さんの Blog がわかりやすいです。

http://www.ailight.jp/blog/kazuk/articles/6287.aspx

BeginInvoke の後ろ2つの引数は使用しないのであれば null でも大丈夫です。
ただし、今回は int x をどうにか処理したいようなので
int x を処理するような callback を作成し、
これを AsyncCallback オブジェクトとして渡してあげればいいのではないでしょうか?
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-09 15:58
IAsyncResult ar = dlgt.BeginInvoke( new AsyncCallback(CallbackMethod),null);
と、BeginInvokして
static void CallbackMethod(IAsyncResult ar)
{
CalcuDelegate dlgt = (CalcuDelegate) ar.AsyncState;
int[] x = dlgt.EndInvoke(ar);
}
で、CallBackMethodでint[] xが取り出せたのですが、protected override void OnPaint(PaintEventArgs pea){}でint[] xを使いたいのですが、どうすればOnPaintメソッド内で使えるようになりますか?
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-09 16:09
上のCalcuDelegateはMethodDelegateの間違いです。

スキルアップ/キャリアアップ(JOB@IT)