替代问题:为什么VS10如此热衷于抱怨Invoke?
在我不断追求让我的应用程序成为世界上最好的C#程序员的过程中,我认为线程是一件好事.
MSDN有一篇关于对控件进行线程安全调用的有用文章,但它(以及看似关于该主题的所有其他文章)倾斜地引用了一个名为Invoke的方法.有时甚至是BeginInvoke,我读过的也是首选.
如果我能让visual studio识别Invoke,那么这一切都会很棒.MSDN说它包含在System.Windows.Forms程序集中,但我已经"使用"它了.可以肯定的是,我也尝试过使用System.Threading,但无济于事.
我需要通过哪些环节才能调用工作?
我有一个非托管DLL,其函数将指针作为参数.如何从C#传递指针而不是"不安全"?
这是一些示例代码:
[DllImport(@"Bird.dll")]
private static extern bool foo(ushort *comport);
Run Code Online (Sandbox Code Playgroud)
标题中的相应条目:
BOOL DLLEXPORT foo(WORD *pwComport);
Run Code Online (Sandbox Code Playgroud)
当我尝试简单地取消引用它(&comport)时,我得到一个错误说:" 指针和固定大小的缓冲区只能在不安全的上下文中使用. "
我该如何解决这个问题?
我有以下结构:
[StructLayout(LayoutKind.Auto,Pack=0)]
private unsafe struct BIRDSYSTEMCONFIG
{
public byte bySystemStatus;
public byte byError;
public byte byNumDevices;
public byte byNumServers;
public byte byXmtrNum;
public ushort wXtalSpeed;
public double dMeasurementRate;
public byte byChassisNum;
public byte byNumChassisDevices;
public byte byFirstDeviceNum;
public ushort wSoftwareRev;
public fixed byte byFlockStatus[127];
}
Run Code Online (Sandbox Code Playgroud)
基于C ++结构:
typedef struct tagBIRDSYSTEMCONFIG
{
BYTE bySystemStatus; // current system status (see bird system status bits, above)
BYTE byError; // error code flagged by server or master bird
BYTE byNumDevices; // number of devices …Run Code Online (Sandbox Code Playgroud) 我使用php作为我的web项目,但我需要单独的CSS这个着色补充.
因此,我需要在Firefox和Internet Explorer中运行的代码.
此代码已编写,但在Internet Explorer中不起作用:
.tbl_css col:nth-child(odd){
}
.tbl_css col:nth-child(even){
}
Run Code Online (Sandbox Code Playgroud) 我决定尝试AForge的视频和图像处理,我尝试实现这个简单的演示:
private void Main_Load(object sender, EventArgs e)
{
// enumerate video devices
FilterInfoCollection videoDevices = new FilterInfoCollection(
FilterCategory.VideoInputDevice);
// create video source
VideoCaptureDevice videoSource = new VideoCaptureDevice(
videoDevices[0].MonikerString);
// set NewFrame event handler
videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
// start the video source
videoSource.Start();
}
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
this.pictureBox1.Image = eventArgs.Frame;
}
Run Code Online (Sandbox Code Playgroud)
问题是我总是得到一个ArgumentException,但并不总是马上发生.它弹出Application.Run(new Main());,但堆栈跟踪的顶部看起来像这样:
at System.Drawing.Image.get_Width() at System.Drawing.Image.get_Size()at System.Windows.Forms.PictureBox.ImageRectangleFromSizeMode(PictureBoxSizeMode mode)at System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)不确定这是否相关,但ParamName异常的属性为null.我试过在try ... catch块中包装图像赋值,但这没有帮助.我还检查过以确保图像在分配之前不为空.我还检查了非null,但是0x0大小的图像. …
我不是(故意)在我的C#应用程序中使用线程.事实上我的主要方法有一个[STAThread],我认为这意味着我只使用一个线程.
为什么然后,我会收到此错误消息?
跨线程操作无效:控制'messageLog'从其创建的线程以外的线程访问.
我无法更新数据库的特定列.在我的数据库中有一个"条件"列,其默认值为"pending".我想用值"accept"更新此列,但我无法这样做.
我的routes.php
Route::get('accept/{id}',array(
'as'=>'accept-product',
'uses'=>'GoodsController@updateProduct
));
Run Code Online (Sandbox Code Playgroud)
我的控制器:
public function updateProduct($id)
{
$product = Products::findOrFail($id);
$product->conditions = 'accept';
$product->save();
}
Run Code Online (Sandbox Code Playgroud)
我的看法:
@foreach($product as $productAccept)
<a href="{{URL::route('accept-product')}}/{!! $productAccept->id !!} ">Accept</a>
@endforeach
Run Code Online (Sandbox Code Playgroud)
当我点击"接受"按钮时,网址就是这样的
http://localhost/project/public/accept/{id}
我想要这样:
http://localhost/project/public/accept/7
我的意思是我无法取代{id}整数一样7,8等
我的错了routes吗?
在这个问题中,Bill The Lizard询问如何显示float或double的二进制表示.
我想知道的是,给定一个适当长度的二进制字符串,我怎样才能执行反向操作(在C#中)?换句话说,如何将二进制字符串转换为float或double?
作为旁注,是否有任何位串不会导致有效的浮点数或双倍?
编辑:二进制字符串我的意思是一个0和1的字符串.
所以,我的输入将是这样的字符串:
01010101010101010101010101010101
Run Code Online (Sandbox Code Playgroud)
我的输出应该是一个浮点数.(或者,如果字符串中有64位,则为double.)
我有一些带有一些公共属性的用户控件.特定属性是整数,但只能接受小于const最大值的正值.目前我做以下事情:
private int markerwidth = 2;
[DefaultValue(2), Category("Appearance"), Description("Size of position marker")]
public int MarkerWidth
{
get
{
return this.markerwidth;
}
set
{
if (value > 0 && value <= MAXMARKERWIDTH)
{
this.markerwidth = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样做可以完成工作,但是会无声地失败.我想我可以添加逻辑以将0用于负值,将最大值用于超过它的那些,但它仍然不理想.
相比之下,UserControl如果我尝试在设计时(并且可能在运行时)设置负值,则TabValue属性(继承自)会抱怨.
如果这是通过正常例外实现的?或者,还有更好的方法?一个属性可能吗?
我刚刚async在一个方法的签名中找到了一个奇怪的行为,因为缺少一个修饰符.有了它,我得到了预期的行为,但没有它,我的程序表现得很奇怪.
问题是,方法的主体是完全同步的:看不到一个await.我甚至(如预期的那样)获得编译器警告1998:
这种异步方法缺少"等待"运算符并将同步运行.考虑使用'await'运算符等待非阻塞API调用,或'await Task.Run(...)'在后台线程上执行CPU绑定工作.
那么诱惑就是将其删除.(我的意思是,编译器基本上告诉我!)当我删除它时,我开始可靠地获得意外行为.
我的问题是:当没有等待时,异步真的在做什么?
我不认为我的应用程序的具体细节与我渴望理解的基本解释有关,但我会在这里包含它以给出一些风味......
我正在开发的程序消耗来自服务总线的消息.我方法的签名是:
public async Task<BrokeredMessage> ProcessMessageAsync(BrokeredMessage inMessage)
Run Code Online (Sandbox Code Playgroud)
历史背景:我最初是从同事编写的类似程序中借用的,方法名称(暗示异步操作)是接口实现的一部分.
我删除async修饰符时遇到的奇怪行为是方法的主体被执行,但是消息被返回为无法传递.这样做的一个有趣结果是我最终会为每次重试尝试处理消息.(我很幸运,这是一个很低的数字!)
正如Skeet先生所指出的那样,重要的是,虽然签名承诺返回值类型Task,但我的方法实际上会返回null.
c# ×8
.net ×1
aforge ×1
async-await ×1
asynchronous ×1
attributes ×1
binary ×1
css ×1
design-time ×1
dllimport ×1
double ×1
invoke ×1
laravel ×1
marshalling ×1
mysql ×1
php ×1
picturebox ×1
pointers ×1
properties ×1
struct ×1
unmanaged ×1
unsafe ×1