FC2ブログ

有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'フォームコントロール名' がアクセスされました

emotionサイトトップ > C#/.NET初心者メモ >有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'フォームコントロール名' がアクセスされました

this.label_top_avevol.Text = "test";


単純にフォーム上に配置したラベルにテキストを設定すると

System.InvalidOperationException: '有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'フォームコントロール名' がアクセスされました。'


というエラーになります。

原因:フォームコントロールはマルチスレッドを使用してアクセスしているので、アクセス競合やデッドロックによるバグが発生してしまうので、実行時にエラーになる。

対策:スレッドセーフな方法でフォームコントロールにアクセスする必要がある。
具体的には、スレッドIDをチェックし別スレッドの場合、Invokeメソッドを使用したスレッドからフォームコントロールアクセスする。
同一スレッドの場合は、直接フォームコントロールアクセスする。

using System.Threading;

namespace FormTest
{
public partial class FormMain : Form
{
// ―――――――――――――――――――――――――――――――――
// フォームアクセススレッド
// ―――――――――――――――――――――――――――――――――
private Thread AnotherThread = null;
delegate void VoidDeledate(string text);

private void SetLabel(string in_str){
if (this.label_top_avevol.InvokeRequired == true)
{ // 呼び出しスレッドとスレッドIDが異なる場合
VoidDeledate temp_del = new VoidDeledate(SetLabel);
this.Invoke( temp_del, new object[] { in_str } );
} else {
// 呼び出しスレッドとスレッドIDが一致している場合、直接フォームコントロールに設定する
this.label_top_avevol.Text = in_str;
}
}

private void SetTextLabel(){
SetLabel("test");
}

// ―――――――――――――――――――――――――――――――――
// フォームメイン
// ―――――――――――――――――――――――――――――――――
public FormMain()
{
InitializeComponent();

this.AnotherThread = new Thread( new ThreadStart( this.SetTextLabel) );
this.AnotherThread.Start();
}
}
}
関連記事

スポンサーリンク
おススメ

ローエンドGPUですが4K対応です。 ロープロ対応でTDP30Wなので電源容量の少ないスリムPC向けです。GTX750Tiの新品が入手困難になっているので、ロープロ対応でGTX750Tiに近い性能が必要な人はGT1030がお勧めです。ただNVENC非対応なのでハードウェアエンコードする人向きではありません。

今から購入するならGTX1050Tiがオススメです消費電力はGTX750Tiと変わりません(TDP:75W)。メモリも4Gに増えています。


UE4エディターを使うなら消費電力の小さいGTX750Tiがオススメです(TDP:75W)。玄人志向のGTX750Tiならロープロ対応で消費電力も少なめ(TDP:60W)です。メモリは2Gです。
ただGTX750Tiの在庫が減少した為か、750Tiの価格が上昇しているので新しい1050Tiの方が安く買えます。


UE4とゲーム開発の勉強に最適です。本書とは別にPDFファイルと動画での解説があります。 バンダイナムコ社の方々がゲーム制作現場のノウハウを交えながらの解説されている為読み応えがありますし、内容も非常に分かりやすいです。唯一残念なのは、索引が無い事です。


UE4を全体的に触りだけ紹介されています。ブループリントはレベルブループリントでの解説だけの為、実際のゲーム開発現場での効率性等は一切無視された内容です。 恐らくクラスブループリントの紹介は続編で紹介していると思います。 上記のバンダイナムコ社の方々が作成した書籍の方が内容が何倍も濃く、実践向けの内容です。


動画編集・エフェクト追加に最適なソフトウェア
このCS6は全面クラウド化される前のパッケージなので、月額使用料は発生しません。

Production Premiumに含まれる単体製品
・Photoshop CS6 Extended
・Illustrator CS6
・Flash Professional CS6
・Premiere Pro CS6
・After Effects CS6
・Audition CS6
・SpeedGrade CS6
・Prelude CS6
・Encore CS6
Amazonで何度か商品閲覧していると割引クーポンがメールで送られて来ます



バージョンによって対応するGPUが異なるので
Adobe 必要システム構成で確認した方がいいです。CS6でQuadroではなくGeforceを使用する場合、対応するGPUは限られます(裏ワザで対応していないGPUを認識させる事は出来ますがおススメしません)。大人しくQuadroを購入した方が無難ですw

Quadroの性能比較は
nvidiaのサイトで確認出来ます。
ムービー制作の強力なツール
AfterEffectsの勉強にどうぞ。

タイムラインがキーフレームで埋め尽くされている人はエクスプレッションで作業効率UPしましょう。

無料の高性能3DCGツールのマニュアル。少し古いバーション用マニュアルなので最新版と差異が多少ありますが、基本的な操作は殆ど変わってないので、古いVerのマニュアルでも大丈夫です。
カウンター
リンク
Unreal Engine
UE4_logo.png

無料化したゲームエンジンです。ミドルレンジクラスのGPUが必須ですが、GTX750Tiでも軽快に動作します。
ueHow
Blender
blenderlogo.png

無料の3DCGツールです。他3DCGツールに使い慣れていると初めは操作性に苦戦しませすが、すぐに慣れます。無料でありながら高性能なので個人レベルで使用するならこれで十分です。
80Level
ゲーム制作の役に立つHow toが掲載されています。
THIEF TheGraceProject
title_blog.jpg

Thiefシリーズ日本語攻略サイト
AEP PROJECT
AEP.png

AfterEffectsUsersCommunity。色々と勉強になります。

BakaAfter
BA.png

神の領域に達した人がAdobeAfterEffectsを使うとこうなりますw

Animeの道具箱
datool.png
AfterEffectsのエクスプレッションやスクリプトについて非常に分かり易くまとめられています。

MMD配布サイト
VPVP.jpg

カメラ情報をAfterEffectsへ書き出すスクリプトや、Kinectと連携出来たりして何気に高機能なフリーソフトです。

Steam
steam.png
Valve Corporationが運営しているプラットフォームで、PCゲームをダウンロード購入出来ます。 不定期ながらだいたい四半期毎と10月の米国感謝祭と年末に大幅割引セールが行われるので、セール中に購入するのがおススメ。
カテゴリ
OS (5)
Adobe (8)
Web (5)
CPU (4)
GPU (10)
HDD (12)
GA2 (2)
PS3 (11)
GTA5 (18)
検索フォーム
最新記事
RSSリンクの表示