将MSDN示例从C#转换到C ++ / CLI [英] Translate MSDN example from C# to C++/CLI
本文介绍了将MSDN示例从C#转换到C ++ / CLI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是Microsoft的代码示例(MSDN)(构建sql依赖应用程序),你能请帮我把这个代码从c#转换成C ++ / CLI,我一直在尝试我,但我不是真的好在c ++。
this is a code sample from Microsoft(MSDN) (build sql dependency application) , could you please help me translate this code from c# into C++/CLI, I've been trying I, but I'm not really good in c++.
private void dependency_OnChange(
object sender, SqlNotificationEventArgs e)
{
// This event will occur on a thread pool thread.
// Updating the UI from a worker thread is not permitted.
// The following code checks to see if it is safe to
// update the UI.
ISynchronizeInvoke i = (ISynchronizeInvoke)this;
// If InvokeRequired returns True, the code
// is executing on a worker thread.
if (i.InvokeRequired)
{
// Create a delegate to perform the thread switch.
OnChangeEventHandler tempDelegate =
new OnChangeEventHandler(dependency_OnChange);
object[] args = { sender, e };
// Marshal the data from the worker thread
// to the UI thread.
i.BeginInvoke(tempDelegate, args);
return;
}
// Remove the handler, since it is only good
// for a single notification.
SqlDependency dependency =
(SqlDependency)sender;
dependency.OnChange -= dependency_OnChange;
// At this point, the code is executing on the
// UI thread, so it is safe to update the UI.
++changeCount;
label1.Text = changeCount;
}
推荐答案
快速尝试:
private void dependency_OnChange(
System::Object^ sender, SqlNotificationEventArgs^ e)
{
// This event will occur on a thread pool thread.
// Updating the UI from a worker thread is not permitted.
// The following code checks to see if it is safe to
// update the UI.
ISynchronizeInvoke^ i = this;
// If InvokeRequired returns True, the code
// is executing on a worker thread.
if (i->InvokeRequired)
{
// Create a delegate to perform the thread switch.
OnChangeEventHandler^ tempDelegate =
gcnew OnChangeEventHandler(this, &Form1::dependency_OnChange);
cli::array<System::Object^>^ args = gcnew cli::array<System::Object^>(2);
args[0] = sender;
args[1] = e;
// Marshal the data from the worker thread
// to the UI thread.
i->BeginInvoke(tempDelegate, args);
return;
}
// Remove the handler, since it is only good
// for a single notification.
SqlDependency^ dependency = safe_cast<SqlDependency^>(sender);
dependency->OnChange -= gcnew OnChangeEventHandler(this, &Form1::dependency_OnChange);
// At this point, the code is executing on the
// UI thread, so it is safe to update the UI.
++changeCount;
label1->Text = changeCount.ToString();
}
这篇关于将MSDN示例从C#转换到C ++ / CLI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文